Типы не совпадают для создания хранимой процедуры 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