2012-12-03 77 views
1

拉出屬性我有以下XML:從TSQL XML

<help> 
    <item field="field1" help="helptext" /> 
    <item field="field2" help="helptext" /> 
    <item field="field3" help="helptext" /> 
</help> 

我有這個存儲在SQL Server的XML數據類型,想拔出領域和幫助文本seperately。即,一組結果類似於:

| field1 | helptext | 
| field2 | helptext | 
| field3 | helptext | 

有沒有人知道如何實現這個目標?

最親切的問候,

亞當

回答

1
DECLARE @xml AS XML = '<help> 
    <item field="field1" help="helptext" /> 
    <item field="field2" help="helptext" /> 
    <item field="field3" help="helptext" /> 
</help>' 

select c.value('@field', 'varchar(max)') field, c.value('@help', 'varchar(max)') help 
from @xml.nodes('/help/item') T(c); 

要達到同樣的,當XML數據表中的字段使用:

SELECT c.value('@field', 'varchar(max)') field, c.value('@help', 'varchar(max)') help 
FROM MyTable A CROSS APPLY A.MyXmlField.nodes('/help/item') T(c) 

其中MyTable的是含有場MyXmlField XML表數據。

+0

感謝您的回覆。如果XML是一個變量,這真的很好。儘管我正在創建一個視圖,但我仍在努力將它連接起來以便從表中使用它。 –

+0

你好,這可以用CROSS Apply來完成,現在正在工作。謝謝你的幫助! –

1

看看以下幫助:

DECLARE @processedXmlDoc int 
DECLARE @inputDoc varchar(1000) 

EXEC sp_xml_preparedocument @processedXmlDoc OUTPUT, @inputDoc 

SELECT * 
FROM  OPENXML (@processedXmlDoc , '/help/item',1) 
      WITH (field varchar(20) 'field', 
        help varchar(20) 'helpText') 

EXECUTE sp_xml_removedocument @idoc 

希望有所幫助。

1

嘗試這樣:

DECLARE @input XML = '<help> 
    <item field="field1" help="helptext" /> 
    <item field="field2" help="helptext" /> 
    <item field="field3" help="helptext" /> 
</help>' 

SELECT 
    Field = Item.value('@field', 'varchar(25)'), 
    HELP = Item.value('@help', 'varchar(50)') 
FROM 
    @input.nodes('/help/item') AS XTbl(Item)