2012-03-27 42 views
6

我有一個方法,看起來像這樣的組件的CLR:類型不匹配,用於創建存儲過程

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 

當我跑,我得到這個錯誤:

CREATE PROCEDURE for "MySproc " failed because T-SQL and CLR types for parameter "@myMessage" do not match.

任何想法如何,我可以解決這個問題?

我也曾嘗試這些方法簽名:

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

回答

5

SQL類型nvarchar映射到CLR(.NET)類型SqlString

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