Можно ли создать новый оператор T-SQL с помощью кода CLR в SQL Server? - PullRequest
5 голосов
/ 06 апреля 2010

У меня очень простая функция CLR для сопоставления регулярных выражений

public static SqlBoolean RegExMatch(SqlString input, SqlString pattern)
{
    if (input.IsNull || pattern.IsNull)
        return SqlBoolean.False;

    return Regex.IsMatch(input.Value, pattern.Value, RegexOptions.IgnoreCase);
}

Позволяет мне писать SQL-операторы Like.

SELECT * FROM dbo.table1 WHERE dbo.RegexMatch(column1, '[0-9][A-Z]') = 1
-- match entries in col1 like 1A, 2B etc...

Я просто думаю, что было бы неплохо переформулировать этот запрос, чтобы он мог называться как

SELECT * FROM dbo.table1 WHERE column1 REGEXLIKE '[0-9][A-Z]'

Можно ли создавать новые операторы сравнения, используя код CLR. (Я догадываюсь из моего короткого взгляда по сети, что ответ НЕТ , но без вопросов спрашиваю)

Ответы [ 2 ]

6 голосов
/ 06 апреля 2010

Нет, вы не можете. Вы можете создавать функции, хранимые процедуры, триггеры и т. Д., Но нет возможности создавать новые операторы или команды T-SQL. Насколько я могу судить, в SQL Server 2008R2 тоже нет.

0 голосов
/ 07 января 2015

В этой ссылке вы можете увидеть, как объявлять операторы в SQLCLR: http://msftengprodsamples.codeplex.com/wikipage?title=SS2008!User-Defined%20Data%20Type%20(UDT)%20Sample&referringTitle=Home

Например:

    public static SqlBoolean operator ==(ComplexNumber c1, ComplexNumber c2)
    {
        return c1.Equals(c2);
    }
...