2010-01-25 3 views
6

मैं SQL सर्वर में एक दृश्य बनाना चाहता हूं जो डेटाबेस मेटाडेटा के कई टुकड़ों को जोड़ती है। मेटाडाटा केकिसी TSQL व्यू (pivot?) में डेटा की पंक्तियों से स्ट्रिंग कॉन्सटेनेशन निष्पादित करना

एक टुकड़ा मैं sys.syscomments तालिका में जीवन चाहते हैं - प्रासंगिक कॉलम इस प्रकार हैं:

id colid text 
---- ------ ------------- 
1001 1  A comment. 
1002 1  This is a lo 
1002 2  ng comment. 
1003 1  This is an e 
1003 2  ven longer c 
1003 3  omment! 

आप "पाठ" स्तंभ में डेटा देख सकते हैं कई पंक्तियों में विभाजित है अगर यह गुजरता अधिकतम लंबाई (SQL सर्वर में 8000 बाइट्स/4000 वर्ण, मेरे उदाहरण में 12 वर्ण)। colid ऑर्डर की पहचान करता है जिसमें पाठ को एकसाथ इकट्ठा करना है।

मैं मेरे विचार sys.syscomments तालिका से टिप्पणी को पुनः एकत्रित करने में क्वेरी/सबक्वेरी बनाने के लिए, ताकि मैं करना चाहते हैं:

id comment (nvarchar(max)) 
---- ---------------------------------- 
1001 A comment. 
1002 This is a long comment. 
1003 This is an even longer comment! 

कोई सुझाव या समाधान? गति किसी भी तरह से महत्वपूर्ण नहीं है, लेकिन सादगी और कम प्रभाव है (मैं सीएलआर कार्यों से बचना चाहता हूं और जैसा कि आदर्श रूप से पूरी चीज दृश्य परिभाषा में लपेटा जाएगा)। मैंने कुछ एक्सएमएल आधारित सुझावों को देखा है, लेकिन परिणामों ने एक्सएमएल एस्केप स्ट्रिंग से भरा टेक्स्ट बनाया है।

उत्तर

13
SELECT id, 
     (
     SELECT text AS [text()] 
     FROM mytable mi 
     WHERE mi.id = md.id 
     ORDER BY 
       mi.col 
     FOR XML PATH(''), TYPE 
     ).value('/', 'NVARCHAR(MAX)') 
FROM (
     SELECT DISTINCT id 
     FROM mytable 
     ) md 
+0

प्रश्न में उल्लेख किया है, मैं पहले से ही इस मार्ग नीचे चले गए हैं। नतीजा यह है कि तार्किक तुलना ऑपरेटर से नई लाइनों तक सबकुछ के लिए XMl एस्केप अनुक्रमों के साथ छेड़छाड़ की गई पाठ है। यह खराब उत्पादन आगे के संचालन जैसे कि LIKE खोजों के लिए उपयुक्त नहीं है। – David

+0

'@ डेविड': पोस्ट अपडेट देखें। – Quassnoi

+0

धन्यवाद। यह बहुत उपयोगी था। – David

1

क्यों जो किसी एकल nvarchar (अधिकतम) के रूप में डेटा संग्रहीत करता sys.sql_modules परिभाषा स्तंभों का उपयोग नहीं इस लेख विषय के बारे में अच्छी चर्चा है?

इसके बजाय कई syscomments पाठ पढ़ने की

(nvarchar (4000)) स्तंभों कई पंक्तियों में फैला हुआ है और श्रेणीबद्ध करने के लिए।

SELECT object_id, definition FROM sys.sql_modules 

बस एक सोचा ... तुम क्या कहा सरल :-)

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