代码之家  ›  专栏  ›  技术社区  ›  Eoin Campbell

是否可以在SQL Server中使用CLR代码创建新的T-SQL运算符?

  •  5
  • Eoin Campbell  · 技术社区  · 15 年前

    我有一个非常简单的clr函数来进行regex匹配

    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语句。

    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 回复  |  直到 10 年前
        1
  •  6
  •   marc_s    15 年前

    不,你不能。您可以创建函数、存储过程、触发器等,但是没有设置来创建新的T-SQL运算符或命令。据我所知,也不在SQL Server 2008R2中。

        2
  •  0
  •   Ronen Ariely    10 年前

    在此链接中,您可以看到如何在sqlcr中声明运算符: 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);
        }