0

たとえば、C# を使用して MAX() 関数を自分で開発できますか? ありがとう!

4

1 に答える 1

0

この投稿 (http://stackoverflow.com/questions/4749071/clr-table-valued-function-with-array-argument?rq=1) に記載されているように、テーブル値パラメーターはサポートされていません。SQL/CLR 関数は、SqlChars、SqlString、SqlInt32 など、名前空間 System.Data.SqlTypes 内の型の引数を取ります。基本的に、これらはプリミティブ型です。行セットや配列は関数パラメーターとして許可されません (前のリンクの回答を参照)。回避策を提案します)。

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から取得)

于 2012-11-08T00:55:34.133 に答える