2011-11-15 11 views
6

में मैं अपने टेबल में से एक में text डेटा प्रकार का उपयोग करता हूं और मैं क्वेरी के साथ PIVOT का भी उपयोग करता हूं। मैं MAX(AttributeValue) का उपयोग करने में असमर्थ हूं जहां AttributeValuetext का प्रकार है। यह निम्नलिखित त्रुटि Operand data type text is invalid for max operator. देता है। मैं इसे यहां कैसे उपयोग कर सकता हूं, क्योंकि PIVOT के साथ aggregate फ़ंक्शन का उपयोग करने के लिए मुझे लगाया गया है।MAX (टेक्स्ट) रिटर्न अधिकतम ऑपरेटर के लिए ऑपरेशन डेटा प्रकार टेक्स्ट अमान्य है। एसक्यूएल सर्वर 2008

संपादित करें: मैं पद http://msdn.microsoft.com/en-us/library/ms187993.aspx

मैं nvarchar(max) लिए डेटा प्रकार परिवर्तित करने की कोशिश की पीछा किया।

ALTER TABLE dbo.MyTable 
ALTER COLUMN AttributeValue NVARCHAR(MAX) 

मुझे भी Full Text Search विकल्प का उपयोग करना होगा। मैं निम्न त्रुटि Cannot alter or drop column 'AttributeValue' because it is enabled for Full-Text Search.

SELECT 
[6B93119B-263B-4FED-AA89-198D26A3A3C4] DOB 
,[F1A0D9D6-702E-4492-9EBC-63AD22E60E6A] CaseTitle 
FROM MyTable PIVOT 
( MAX(AttributeValue) 
    FOR AttributeID IN 
    (
     [6B93119B-263B-4FED-AA89-198D26A3A3C4] 
     ,[F1A0D9D6-702E-4492-9EBC-63AD22E60E6A] 
    ) 
) ResultTable 

जहाँ 'AttributeValue' 'पाठ' डेटा प्रकार का है मिलता है। मुझे निम्न त्रुटि मिलती है,

ऑपरेटर डेटा प्रकार टेक्स्ट अधिकतम ऑपरेटर के लिए अमान्य है।

ठीक है, मैंने क्षेत्र को nvarchar (अधिकतम) में डालने की कोशिश की। यह एक और प्रकार की त्रुटि देता है (चौथी पंक्ति में)।

Incorrect syntax near '(' 

क्या मुझे कुछ याद आया?

उत्तर

9

आप अपना टेक्स्ट कॉलम वर्चर (अधिकतम) में डाल सकते हैं।

select max(cast(AttributeValue as varchar(max))) 
from YourTable 

आप एक उप प्रश्न में अपना डेटा बदल सकते हैं।

SELECT 
[6B93119B-263B-4FED-AA89-198D26A3A3C4] DOB 
,[F1A0D9D6-702E-4492-9EBC-63AD22E60E6A] CaseTitle 
FROM (SELECT AttributeID, 
       CAST(AttributeValue as VARCHAR(MAX)) as AttributeValue 
     FROM MyTable 
    ) AS T 
    PIVOT 
( MAX(AttributeValue) 
    FOR AttributeID IN 
    (
     [6B93119B-263B-4FED-AA89-198D26A3A3C4] 
     ,[F1A0D9D6-702E-4492-9EBC-63AD22E60E6A] 
    ) 
) ResultTable 
+0

मेरा संपादन देखें :(मुझे एक त्रुटि मिलती है। – Rauf

2

यदि मुझे याद है कि सही है, SQL सर्वर में पाठ आपको इसके खिलाफ बहुत से आदेश चलाने नहीं देता है। एकमात्र (आधा) समाधान जो मैंने पार किया है वह टेक्स्ट को एक अलग डेटा प्रकार पर कास्टिंग कर रहा है; दुर्भाग्यवश, इसका मतलब कुछ कोड लिखना, और केवल अनुभागों में वास्तविक संग्रहीत टेक्स्ट डेटा से निपटना है।

इसके अलावा, पाठ एसक्यूएल सर्वर के भविष्य के संस्करणों से हटाया जा रहा है: http://msdn.microsoft.com/en-us/library/ms187993.aspx

तो, सिर्फ NVARCHAR (मैक्स) के लिए स्तंभ डेटा प्रकार में परिवर्तन, और उम्मीद है कि क्वेरी ठीक से चलेंगे।

0

तुम भी मैक्स() के भीतर DATALENGTH() का उपयोग संभवतः बहुत बड़ा तार कास्टिंग से बचने के लिए कर सकते हैं।

SELECT 
    6B93119B-263B-4FED-AA89-198D26A3A3C4] DOB 
,[F1A0D9D6-702E-4492-9EBC-63AD22E60E6A] CaseTitle 
FROM MyTable PIVOT 
( MAX(DATALENGTH(AttributeValue)) 
    FOR AttributeID IN 
    (
     [6B93119B-263B-4FED-AA89-198D26A3A3C4] 
     ,[F1A0D9D6-702E-4492-9EBC-63AD22E60E6A] 
    ) 
) ResultTable 
संबंधित मुद्दे