2011-09-28 8 views
6

मुझे कोई समस्या है, जिसे मैं हल नहीं कर सकता। मैं बाहरी सर्वर का उपयोग करने के लिए SQL सर्वर 2005, सी # सीएलआर का उपयोग कर रहा हूं। समस्या है पैरामीटर की लंबाई में। मैं समारोह पैरामीटर प्रकार varchar(max) के रूप में उपयोग करने के लिए की जरूरत है। string, SqlSring सी # कोड में मैं उपयोग करते हैं, मैं T-SQL प्रकार varchar(max), nvarchar(4000) का सिर्फ varchar(4000) उपयोग नहीं कर सकते। मैं कहता हूँ की जरूरत है, कि हो सकता है परिस्थितियों, जब मुझे 4000 प्रतीकों का अधिक उपयोग करने की आवश्यकता है, तो मुझे पता होना चाहिए कि varchar(max) के लिए मुझे किस सी # प्रकार का उपयोग करने की आवश्यकता है।टी-एसक्यूएल (वर्कर (अधिकतम) बनाम सीएलआर (स्ट्रिंग, एसक्लस्ट्रिंग, एसक्लचर्स)?

मैंने बहुत से लेख पढ़े हैं, और उनमें से कई कहते हैं, इसके लिए मैं कर सकता हूं SqlChars का उपयोग करें। लेकिन! मेरे पास तारों के साथ जोड़-विमर्श है। मेरे साथ कार्य कैसे हो सकता है string या SqlString और फिर SqlChars में कनवर्ट करें? (यह संभव है SqlChars.ToString() या SqlChars.ToSqlString())।

मुझे इसके लिए कोई सी # कोड नहीं मिला।

+0

एक 'varchar (max)' स्ट्रिंग है कि इसकी अधिकतम क्षमता उपयोग कर रहा है एक CLR स्ट्रिंग में लोड करने योग्य नहीं होगा, चूंकि यह पता स्थान समाप्त कर देगा। क्या आप इन स्ट्रिंग्स के खिलाफ क्या क्रियाएं करना चाहते हैं, इसके बारे में अधिक स्पष्ट हो सकते हैं? –

+0

मैं किसी भी एसक्यूएल प्रकार को वर्चर में परिवर्तित करता हूं और यह मान बाहरी डीएलएल में भेजता हूं। इसके अलावा, इसके साथ कुशलतापूर्वक करें और SQL सर्वर पर वापस आएं। अब मैं एसक्यूएल/वीचर (4000) और सी #/स्ट्रिंग का उपयोग करता हूं। मुझे 4000 से अधिक प्रतीकों की आवश्यकता है। –

+0

@Damien_The_Unbeliever: मैं इंप्रेशन के तहत था कि SQL सर्वर के 'वर्कर (अधिकतम)' के साथ-साथ एक .NET 'string' उदाहरण आकार में 2 जीबी तक हो सकता है .... –

उत्तर

0

लंबाई -1 का उपयोग करने का प्रयास करें। इस तरह कुछ:

cmd.Parameters.Add("@param", SqlDbType.VarChar, -1).Value = "hdfiophdopigherog"; 
+0

मैं यह कोशिश नहीं कर सकता, क्योंकि मेरे पास SqlCommand नहीं है ... बस इनपुट पैरामीटर - इसके साथ हेरफेर - आउट पैरामीटर। और मुझे IN/आउट पैरामीटर की आवश्यकता होगी SqlChars –

+0

जबकि '-1' तकनीकी रूप से सही है, यह उत्तर अभी भी प्रश्न के लिए अप्रासंगिक है। यह उत्तर एक SQLConnection API से निपट रहा है, न कि SQLCLR API। –

4

मुझे जवाब मिला। न सिर्फ इस सवाल के बारे में मुझसे पूछा। मुझे पदों को और अधिक ध्यान से पढ़ना है ...

यहां पढ़ सकते हैं http://social.msdn.microsoft.com/Forums/is/sqlnetfx/thread/391ebb98-e1b5-47fc-a72d-9f1e39829e3a सीएलआर संगतता की समस्या बहुत मुश्किल नहीं है।

सभी बार मैं varchar(max) का उपयोग करना चाहता था और सी # प्रकार string, SqlString, SqlChars का उपयोग करने की कोशिश की। टी-एसक्यूएल nvarchar(max) का उपयोग करने की आवश्यकता है, और आप किसी भी सी # प्रकार string, SqlString, SqlChars का उपयोग कर सकते हैं!

बेशक nvarcharvarchar से दो बार अधिक जगह ले रहा है।

+0

एसक्यूएलसीएलआर 'वर्चर' के लिए अनुमति नहीं देता है, चाहे वह 1 - 4000 या 'MAX' हो। 'NVARCHAR' एकमात्र स्ट्रिंग प्रकार है जो SQLCLR एपीआई गुजरता है (ठीक है, मुझे लगता है कि 'ऑब्जेक्ट' /' SQL_VARIANT' 4000 तक की स्ट्रिंग भी पास कर सकता है)। यदि आप 'वर्चर' मानों में गुजरते हैं, तो वे पूरी तरह से 'NVARCHAR' में परिवर्तित हो जाते हैं। एसक्यूएलसीएलआर इनपुट या आउटपुट परम प्रकार के रूप में कृपया 'स्ट्रिंग' का उपयोग न करें या सुझाव न दें। अधिक जानकारी के लिए, कृपया मेरी श्रृंखला देखें, [सीएलसीएलएलआर के लिए सीढ़ी] (http: //www.sqlservercentral।कॉम/सीढ़ी/105855 /), एसक्यूएल सर्वर सेंट्रल पर (उस साइट के लिए मुफ्त पंजीकरण आवश्यक है)। –

11

आप क्या करने की जरूरत SqlFacet जोड़ने है (MaxSize = -1) पैरामीटर के लिए गुण:

[return: SqlFacet(MaxSize = -1)] 
[Microsoft.SqlServer.Server.SqlFunction(IsDeterministic = true)] 
public static SqlString YourSqlFunction([SqlFacet(MaxSize = -1)]SqlString sourceSS) 
{ return new } 
+0

सही! यह वीएस को स्वचालित स्क्रिप्ट स्वचालित रूप से बनाने का कारण बन जाएगा! –

+1

यह उत्तर सही है और इसे "स्वीकृत" के रूप में चिह्नित किया जाना चाहिए। +1 –

संबंधित मुद्दे