मैं SQL सर्वर CLR प्रक्रिया बनाने के लिए C# का उपयोग कर रहा हूं। उसमें मैं एक SqlString पैरामीटर को स्ट्रिंग में बदलने की कोशिश कर रहा हूं, लेकिन परिणाम छोटा किया जा रहा है।

यहाँ कोड का सरलीकृत संस्करण है। पैरामीटर "MyParam" में 200 से अधिक वर्णों की एक स्ट्रिंग है, लेकिन किसी कारण से ToString() इसे 100 वर्णों तक छोटा कर देता है। कोई विचार? या SqlString पैरामीटर को बदलने का बेहतर तरीका।

[Microsoft.SqlServer.Server.SqlProcedure]
public static void MySqlClrProcedure(SqlString MyParam)
{
    SqlContext.Pipe.Send("Test: " + MyParam.ToString());
}
0
ptownbro 12 सितंबर 2019, 05:44

1 उत्तर

सबसे बढ़िया उत्तर
  1. हमेशा Sql* प्रकार की Value संपत्ति का उपयोग करने का प्रयास करें। आपके मामले में यह होगा: MyParam.ValueValue गुण सभी Sql* प्रकारों में उपलब्ध है और अपेक्षित .NET प्रकार लौटाता है।

  2. SqlString में कोई अंतर्निहित कटौती नहीं है क्योंकि यह NVARCHAR(MAX) का समर्थन कर सकता है। और SqlContext.Pipe.Send() 4000 UTF-16 वर्णों (8000 बाइट्स) तक सीमित होना चाहिए क्योंकि यह एक PRINT कथन है।

    सबसे अधिक संभावना है कि आपके टी-एसक्यूएल रैपर ऑब्जेक्ट में इसके इनपुट पैरामीटर को NVARCHAR(100) के रूप में परिभाषित किया गया है। इसे NVARCHAR(4000) या NVARCHAR(MAX) में बदलें। यदि आप इसे बनाने के लिए विजुअल स्टूडियो / एसएसडीटी का उपयोग कर रहे हैं, तो आप अपने इनपुट पैरामीटर में एक SqlFacet डेकोरेटर जोड़ सकते हैं ताकि वह उस अधिकतम लंबाई का उपयोग कर सके: MySqlClrProcedure([SqlFacet(MaxLength=4000)] SqlString MyParam)

सामान्य रूप से SQLCLR के साथ काम करने के बारे में अधिक जानने के लिए, कृपया इस विषय पर मेरे द्वारा लिखी जा रही श्रृंखला देखें:

SQLCLR के लिए सीढ़ी

साथ ही: SQLCLR Info

1
Community 20 जून 2020, 09:12