无法找到类型nvarchar(MAX)"添加新的CLR用户定义函数时

本文关键字:添加 CLR 用户 函数 定义 quot 类型 nvarchar MAX | 更新日期: 2023-09-27 18:12:59

我在程序集中创建了一个新函数,该函数已成功地作为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();
}

无法找到类型nvarchar(MAX)"添加新的CLR用户定义函数时

去掉数据类型名称RETURNS NVARCHAR(MAX)周围的括号。双括号表示它被解释为用户定义的数据类型"NVARCHAR(MAX)"

如果您出于任何原因想保留括号,您可以这样做。移动右括号以排除(MAX),如下所示:

RETURNS [NVARCHAR](MAX)