2009-06-22 8 views
26

एक तालिका में, मेरे पास MEMO_TEXT नामक कॉलम है जो एक टेक्स्ट डेटा प्रकार है। जब मैं एक दृश्य बनाने और एक समूह द्वारा उपयोग करने का प्रयास करें, मैं निम्नलिखित त्रुटि मिलती है:SQL सर्वर 2005 में किसी पाठ (या ntext) द्वारा DISTINCT या समूह का कोई तरीका है?

SQL Server Database Error: The text, ntext, and image data types cannot be compared or sorted, except when using IS NULL or LIKE operator.

मैं जब मैं रूप में अच्छी तरह क्वेरी पर एक अलग करने की कोशिश इस त्रुटि मिलती है। इस बारे में कोई विचार है कि इस बारे में कैसे जाना है?

यदि आपको कोई और जानकारी चाहिए, तो कृपया मुझे बताएं।

उत्तर

36

इसके चारों ओर एक हैक इसे nvarchar(max) के रूप में डालना है।

nvarchar [ (n | max) ]

Variable-length Unicode string data. n defines the string length and can be a value from 1 through 4,000. max indicates that the maximum storage size is 2^31-1 bytes (2 GB). The storage size, in bytes, is two times the actual length of data entered + 2 bytes. The ISO synonyms for nvarchar are national char varying and national character varying.

ऐसा ही एक चाल varchar() पर लागू होता है:

यह 4,000 से परे स्ट्रिंग की लंबाई बढ़ाने के लिए एक documented तरीका है।

+4

+1 इस हैक सब पर फोन नहीं होगा (मान फ़ील्ड 3 ntext क्षेत्र है), nvarchar (अधिकतम) ntext अधिरेखित। –

+3

हालांकि अंतर्निहित संरचना को nvarchar (अधिकतम) होने के लिए यह एक हैक से कम होगा ... –

22

इन ...

SELECT DistinctMemo = DISTINCT(CAST(MEMO_TEXT AS varchar(max))) 
FROM MyTable 

-- or 

SELECT DistinctMemo = CAST(MEMO_TEXT AS varchar(max)) 
FROM MyTable 
GROUP BY CAST(MEMO_TEXT AS varchar(max)) 
0

तुम सिर्फ nvarchar (अधिकतम) करने के लिए स्तंभ का डेटा प्रकार बदल सकते हैं का प्रयास करें?

एक और कॉलम डालने पर विचार करें जो आपके ज्ञापन क्षेत्र के पहले 40 वर्ण या उससे अधिक है, और उस पर समूह। यदि आपके पास बहुत सारे टेक्स्ट हैं तो एक मेमो फ़ील्ड पर ग्रुपिंग वास्तव में धीमी होगी।

UPDATE myTable SET myNewField = LEFT(myOldField, 40); 
1

क्या आप जानते हैं कि ntext फ़ील्ड में कभी भी डेटा दोहराया नहीं जाएगा? आप अन्य फ़ील्ड पर व्युत्पन्न तालिका में अलग-अलग कर सकते हैं और फिर ntext फ़ील्ड के साथ तालिका में शामिल हो सकते हैं और इसे बाहरी क्वेरी में ले जा सकते हैं।

कुछ की तरह

select mt.idfield, a.field1, a.field2, mt.field3 
from mytable mt 
join 
(select disitinct mt1.idfield, mt1.field1, mot.field2 from mytable mt1 
join myothertable mot on mt1.idfield = mot.idfield) a 
    on a.ifield = mt.idfield 
संबंधित मुद्दे