2012-03-27 2 views
6

Ich habe eine Methode in einer Baugruppe, die wie folgt aussieht:Typen passen nicht eine CLR gespeicherte Prozedur für die Erstellung von

namespace MyNameSpace 
{ 
    public class MyClass 
    { 
    [Microsoft.SqlServer.Server.SqlProcedure] 
    public static void MyMethod(SqlChars myMessage) 
    { 
     // Stuff here 
    } 
    } 
} 

ich kompilieren, die zu einer dll und laden Sie es in meinem SQL Server wie folgt aus:

drop assembly MyAssembly 
create assembly MyAssemblyfrom 'C:\Scripts\MyAssembly.dll' 

Das alles funktioniert gut.

Aber jetzt versuche ich, dies auszuführen:

CREATE PROCEDURE MySproc @message nvarchar(max) 
AS EXTERNAL NAME MyAssembly.[MyNameSpace.MyClass].MyMethod 

Wenn ich laufen, dass ich diesen Fehler erhalten:

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

Irgendwelche Ideen, wie kann ich dieses Problem lösen?

ich auch diese Methode Signaturen versucht haben:

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

Antwort

5

SQL-Typ nvarchar Karten CLR (NET) Typ SqlString:

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