2013-09-03 5 views
5

में XQuery द्वारा का चयन यह मेरा नमूना XML है:श्रृंखलाबद्ध एक्सएमएल मूल्यों जब T-SQL

<root> 
    <element> 
     <subelement> 
      <value code="code1">value1</value> 
      <value code="code2">value2</value> 
     </subelement> 
    </element> 
</root> 

और यह अपने परीक्षण क्वेरी है:

DECLARE @tempTable TABLE (
    ValueCode nvarchar(MAX), 
    Value nvarchar(MAX) 
) 

DECLARE @xml XML 
select @xml = cast(c1 as xml) from OPENROWSET (BULK 'C:\test.xml', SINGLE_BLOB) as T1(c1) 

INSERT INTO @tempTable 
SELECT 
    Tbl.Col.value('subelement[1]/@code', 'NVARCHAR(MAX)'), 
    Tbl.Col.value('subelement[1]', 'NVARCHAR(MAX)') 
FROM @xml.nodes('//element') Tbl(Col) 

SELECT * FROM @tempTable 

क्वेरी, जब मार डाला, एक बाहर देता है वैल्यूकोड कॉलम के साथ पंक्ति जिसमें एनयूएलएल और वैल्यू कॉलम है जिसमें 'value1value2' है। मैं जो प्राप्त करना चाहता हूं वह एक विभाजक के साथ समेकित गुण और मूल्य होगा। उदाहरण के लिए, मुझे 'कोड 1' रखने के लिए ValueCode की आवश्यकता है; कोड 2 'और मान' मान 1 'रखने के लिए; मान 2 '। मैं उसे कैसे प्राप्त कर सकता हूं?

उत्तर

5

आप xuery उपयोग कर सकते हैं अगर आप श्रेणीबद्ध तार हैं:

SELECT 
    Tbl.Col.query('for $i in value return concat($i/text()[1], ";")').value('.', 'nvarchar(max)'), 
    Tbl.Col.query('for $i in value return concat($i/@code, ";")').value('.', 'nvarchar(max)') 
FROM @xml.nodes('root/element/subelement') Tbl(Col); 
पंक्तियों में

अगर आप अपने मूल्यों हैं:

SELECT 
    Tbl.Col.value('.', 'nvarchar(max)'), 
    Tbl.Col.value('@code', 'nvarchar(max)') 
FROM @xml.nodes('root/element/subelement/value') Tbl(Col); 

sql fiddle demo