Типы не совпадают для создания хранимой процедуры 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:ScriptsMyAssembly.dll'
то все работает нормально.
но теперь я пытаюсь запустить это:
CREATE PROCEDURE MySproc @message nvarchar(max)
AS EXTERNAL NAME MyAssembly.[MyNameSpace.MyClass].MyMethod
когда я запускаю это, я получаю эту ошибку:
создать процедуру для "MySproc" не удалось, потому что типы T-SQL и CLR для параметра "@myMessage" не совпадают.
любые идеи, как Я могу это решить?
Я также пробовал эти сигнатуры метода:
public static void MyMethod(string myMessage)
public static void MyMethod([SqlFacet(MaxSize = -1)] string myMessage)
2 ответов
тип Sql nvarchar
сопоставляет с CLR (.Net) тип SqlString
:
public static void MyMethod(SqlString myMessage)
{
if (! myMessage.IsNull)
{
String myMessageString = myMessage.ToString();
// Do stuff
}
}
вот ссылка, показывающая сопоставление CLR с типами данных SQL Server
http://msdn.microsoft.com/en-us/library/ms131092.aspx
в вашем случае SQLChars карты в nvarchar