类型与创建CLR存储过程不匹配

Vac*_*ano 6 .net c# sqlclr sql-server-2008

我在程序集中有一个方法,如下所示:

namespace MyNameSpace
{
  public class MyClass
  {
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void MyMethod(SqlChars myMessage)
    {
       // Stuff here 
    } 
  }
}
Run Code Online (Sandbox Code Playgroud)

我将其编译为一个DLL并将其加载到我的SQL Server中,如下所示:

drop assembly MyAssembly
create assembly MyAssemblyfrom 'C:\Scripts\MyAssembly.dll'
Run Code Online (Sandbox Code Playgroud)

一切正常.

但现在我尝试运行这个:

CREATE PROCEDURE MySproc @message nvarchar(max)
AS EXTERNAL NAME MyAssembly.[MyNameSpace.MyClass].MyMethod
Run Code Online (Sandbox Code Playgroud)

当我运行时,我收到此错误:

"MySproc"的CREATE PROCEDURE失败,因为参数"@myMessage"的T-SQL和CLR类型不匹配.

我有什么想法可以解决这个问题?

我也试过这些方法签名:

  • public static void MyMethod(string myMessage)
  • public static void MyMethod([SqlFacet(MaxSize = -1)] string myMessage)

Jiv*_*gie 6

这是一个链接,显示了CLR到SQL Server数据类型的映射

http://msdn.microsoft.com/en-us/library/ms131092.aspx

在您的情况下,SQLChars映射到nvarchar


Die*_*ego 5

Sql类型nvarchar映射到CLR(.Net)类型 SqlString:

public static void MyMethod(SqlString myMessage)
{
    if (! myMessage.IsNull) 
    {
        String myMessageString = myMessage.ToString();
        // Do stuff
    }
}
Run Code Online (Sandbox Code Playgroud)