Типы не соответствуют для создания хранимой процедуры CLR - PullRequest
6 голосов
/ 28 марта 2012

У меня есть метод в сборке, который выглядит следующим образом:

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"не удалось, потому что типы T-SQL и CLR для параметра" @myMessage "не совпадают.

Любые идеи, как я могу решить эту проблему?

У меня естьТакже пробовали эти методы подписи:

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

Ответы [ 2 ]

6 голосов
/ 28 марта 2012

Вот ссылка, показывающая сопоставление CLR с типами данных SQL Server

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

В вашем случае SQLChars отображается на nvarchar

5 голосов
/ 28 марта 2012

Тип Sql nvarchar соответствует типу CLR (.Net) SqlString:

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