4

SQL サーバーに CLR アセンブリとして正常に追加されたアセンブリに新しい関数を作成しました。今、そのアセンブリの新しいメソッドにマップする SQL ユーザー定義関数を作成しようとしています。アセンブリには、正常にマップされた他のメソッドがあります。

これが私の機能です

CREATE FUNCTION [dbo].[FromCamelCase](@value [nvarchar(MAX)])
RETURNS [nvarchar(MAX)] WITH EXECUTE AS CALLER
AS 
EXTERNAL NAME [Tools_CLR].[UserDefinedFunctions].[FromCamelCase]
GO

実行すると、このエラーが発生します。

Msg 15151, Level 16, State 1, Procedure FromCamelCase, Line 2
Cannot find the type 'nvarchar(MAX)', because it does not exist or you do not 
have permission.

タイプをnvarcharから just に変更してみましたvarchar。また、サイズMAXを 4000 から 50 に変更してみました。

参考までに、私の C# メソッドを次に示します。

[Microsoft.SqlServer.Server.SqlFunction]
public static string FromCamelCase(string val)
{
    if (val == null) return string.Empty;
    
    val = val.Replace("_", "");
    StringBuilder sb = new StringBuilder(val.Length + 10);
    bool first = true;
    char lastChar = '\0';
    
    foreach (char ch in val)
    {
        if (!first && (char.IsUpper(ch) || char.IsDigit(ch) && !char.IsDigit(lastChar)))
            sb.Append(' ');
    
        sb.Append(ch);
        first = false;
        lastChar = ch;
    }
    
    return sb.ToString();
}
4

2 に答える 2

16

データ型名を囲む括弧を削除します: RETURNS NVARCHAR(MAX). 二重括弧は、名前に括弧があるため、"NVARCHAR(MAX)" (1 語) と呼ばれるユーザー定義のデータ型として解釈され、引用されていることを意味します。

于 2013-05-09T02:51:26.497 に答える