添加新的CLR用户定义函数时出现“找不到类型nvarchar(MAX)”错误

5
我已经在程序集中创建了一个新的函数,并成功将其添加为CLR程序集到我的SQL服务器。现在我正在尝试创建一个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 改为 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();
}

当对两个引用进行更改时,这种更改有效。如果将来有访问者遇到此问题,请将其添加为答案。我的另一个函数可以很好地使用[datetime2]。谢谢您的帮助。 - Valamas
2个回答

18

去掉数据类型名称周围的括号: 返回 NVARCHAR(MAX)。双括号意味着它被解释为称为“NVARCHAR(MAX)”(一个单词)的用户定义的数据类型,并且因为名称中有括号而加以引用


10

如果出于任何原因想要保留括号,可以这样做。将结束括号移到 (MAX) 之外即可:

RETURNS [NVARCHAR](MAX)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接