我可以开发一个可以接受任何类型的参数的SQL / CLR函数,如MAX()吗?

时间:2012-08-20 12:51:46

标签: sql-server sqlclr

例如,我可以自己使用C#开发MAX()函数吗?谢谢!

1 个答案:

答案 0 :(得分:0)

如本文所述(http://stackoverflow.com/questions/4749071/clr-table-valued-function-with-array-argument?rq=1),不支持表值参数。 SQL / CLR函数接受命名空间System.Data.SqlTypes中的类型参数 - 例如SqlChars,SqlString,SqlInt32等。基本上,它们是原始类型:没有行集,没有允许作为函数参数的数组(上一个链接中的答案)提出解决方法)。

SQL / CLR函数更适合于利用System.Text.RegularExpressions命名空间(Regex.Match),或者用于创建返回给定值的哈希的函数 - 可能是密码字符串。

以下是CLR程序集中SQL函数的示例:

public static partial class UserDefinedFunctions
{
    public static readonly RegexOptions Options = RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline;

    [SqlFunction]
    public static SqlBoolean RegexMatch(SqlChars input, SqlString pattern)
    {
        Regex regex = new Regex(pattern.Value, Options);
        return regex.IsMatch(new string(input.Value));
    }

    [SqlFunction]
    public static SqlChars RegexGroup(SqlChars input, SqlString pattern, SqlString name)
    {
        Regex regex = new Regex(pattern.Value, Options);
        Match match = regex.Match(new string(input.Value));
        return match.Success ? new SqlChars(match.Groups[name.Value].Value) : SqlChars.Null;
    }
}

(摘自http://msdn.microsoft.com/en-us/magazine/cc163473.aspx