在添加新的CLR用户定义函数时获取“找不到类型nvarchar(MAX)”

时间:2013-05-08 23:45:13

标签: c# tsql sql-server-2012 clr sql-types

我在程序集中创建了一个新函数,该函数已成功添加到我的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更改为varchar。我也尝试将大小从MAX更改为4000,也只是50。

这是我的C#方法,仅供参考。

[Microsoft.SqlServer.Server.SqlFunction]
public static string FromCamelCase(string value)
{
    if (value == null) return string.Empty;

    value = value.Replace("_", "");
    StringBuilder sb = new StringBuilder(value.Length + 10);
    bool first = true;
    char lastChar = '\0';

    foreach (char ch in value)
    {
        if (!first && (char.IsUpper(ch) || char.IsDigit(ch) && !char.IsDigit(lastChar))) sb.Append(' ');

        sb.Append(ch);
        first = false;
        lastChar = ch;
    }

    return sb.ToString();
}

2 个答案:

答案 0 :(得分:12)

从数据类型名称周围删除括号:RETURNS NVARCHAR(MAX)。双括号表示它被解释为用户定义的数据类型,称为“NVARCHAR(MAX)”(一个单词)和quoted,因为名称中有括号。

答案 1 :(得分:4)

如果您想出于某种原因保留括号,you can.移动右括号以排除(max),如下所示:

returns [nvarchar](max)