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

时间:2012-03-27 23:34:49

标签: c# .net sql-server-2008 sqlclr

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

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

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

drop assembly MyAssembly
create assembly MyAssemblyfrom 'C:\Scripts\MyAssembly.dll'

一切正常。

但现在我尝试运行这个:

CREATE PROCEDURE MySproc @message nvarchar(max)
AS EXTERNAL NAME MyAssembly.[MyNameSpace.MyClass].MyMethod

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

  

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

如何解决此问题?

我也试过这些方法签名:

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

2 个答案:

答案 0 :(得分:6)

以下链接显示了CLR到SQL Server数据类型的映射

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

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

答案 1 :(得分:5)

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

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