2012-03-27 11 views
6

मैं एक विधानसभा है कि इस तरह दिखता है में एक विधि है बनाने के लिए मेल नहीं खाते:प्रकार एक CLR संग्रहीत प्रक्रिया

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

मैं संकलन है कि एक dll करने के लिए और इस तरह मेरी एसक्यूएल सर्वर में इसे लोड:

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 " failed because T-SQL and CLR types for parameter "@myMessage" do not match.

कोई भी विचार कैसे मैं इस को हल कर सकते हैं?

मैं भी इन विधि हस्ताक्षर की कोशिश की है:

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

उत्तर

5

Sql प्रकार CLR को nvarchar नक्शे (नेट) टाइप SqlString:

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

यहाँ एक लिंक एसक्यूएल सर्वर डेटा प्रकार

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

अपने मामले SQLChars नक्शे में करने के लिए CLR का मानचित्रण showingg

NVARCHAR है