2012-12-03 51 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)