2010-09-10 14 views
27

में सीटीई "साथ" और "XMLNAMESPACES के साथ ...." को मिलाएं क्या कोई SQL सर्वर के टी-एसक्यूएल में एक सीटीई बनाने में कामयाब रहा है जिसमें WITH XMLNAMESPACES घोषणा भी शामिल है?SQL सर्वर

ऐसा लगता है दोनों WITH कीवर्ड जा रहा है "पहले T-SQL बैच में" पर जोर देते हैं, और वह काम नहीं करता है वास्तव में ....

मैंने कोशिश की:

WITH XMLNAMESPACES('http://schemas.myself.com/SomeSchema' as ns) 
WITH CTEQuery AS 
(
SELECT (list of fields) 
    FROM dbo.MyTable 
    WHERE (conditions) 
) 
SELECT * FROM CTEQuery 

नहीं आया ' काम नहीं :-((वाक्यविन्यास त्रुटियों)

संदेश 156, स्तर 15, राज्य 1, पंक्ति 2
कीवर्ड 'के साथ' के पास गलत वाक्य रचना।
संदेश 319, स्तर 15, राज्य 1, रेखा 2
कीवर्ड 'साथ' के पास गलत वाक्यविन्यास। यदि यह कथन सामान्य तालिका अभिव्यक्ति है, तो xmlnamespaces खंड या ट्रैकिंग संदर्भ खंड को बदलने, पिछले कथन को सेमिकोलन के साथ समाप्त कर दिया जाना चाहिए।

तो मैं दूसरे WITH prepending अर्धविराम से करने की कोशिश की:

WITH XMLNAMESPACES('http://schemas.myself.com/SomeSchema' as ns) 
;WITH CTEQuery AS 
(
SELECT (list of fields) 
    FROM dbo.MyTable 
    WHERE (conditions) 
) 
SELECT * FROM CTEQuery 

और यह मिल गया: 2
गलत वाक्य रचना के पास

संदेश 102, स्तर 15, राज्य 1, रेखा ';'।

और फिर मैं CTE में WITH XMLNAMESPACES डालने की कोशिश की:

WITH CTEQuery AS 
(
    WITH XMLNAMESPACES('http://schemas.myself.com/SomeSchema' as ns) 
    SELECT (list of fields) 
     FROM dbo.MyTable 
     WHERE (conditions) 
) 
SELECT * FROM CTEQuery 

और यह मिल गया: 4
गलत वाक्य रचना के पास

संदेश 156, स्तर 15, राज्य 1, रेखा कीवर्ड 'साथ'।
संदेश 319, स्तर 15, राज्य 1, रेखा 4
कीवर्ड 'साथ' के पास गलत वाक्यविन्यास। यदि यह कथन सामान्य तालिका अभिव्यक्ति है, तो xmlnamespaces खंड या ट्रैकिंग संदर्भ खंड को बदलने, पिछले कथन को सेमिकोलन के साथ समाप्त कर दिया जाना चाहिए।
संदेश 102, स्तर 15, राज्य 1, रेखा 21
') के पास गलत वाक्यविन्यास।

तो मैं यह कैसे करूँ ??

उत्तर

42

दूसरे WITH के बजाय कॉमा का उपयोग करें, उदा।

WITH XMLNAMESPACES('http://schemas.myself.com/SomeSchema' as ns) 
,CTEQuery AS 
(
SELECT (list of fields) 
    FROM dbo.MyTable 
    WHERE (conditions) 
) 
SELECT * FROM CTEQuery 

वही यदि आप एकाधिक सीटीई अभिव्यक्ति चाहते हैं। आपको केवल WITH एक बार निर्दिष्ट करने की आवश्यकता है, और फिर अन्य सभी WITH ब्लॉक केवल कीवर्ड के बजाय अल्पविराम का उपयोग करें।

+2

और 'XMLNAMESPACES' को पहले 'सीटीई' से पहले परिभाषित किया जाना चाहिए। – Gabrielius