我在程序集中有一个如下所示的方法:
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)
答案 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
}
}