1

我有以下 XML:

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

我将其存储在 SQL Server 中的 XML DataType 中,并希望单独提取字段并帮助文本。即结果集类似于:

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

有谁知道如何实现这一目标?

最亲切的问候,

亚当

4

3 回答 3

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

希望有帮助。

于 2012-12-03T13:15:58.540 回答
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)
于 2012-12-03T13:16:21.290 回答
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 数据的表。

于 2012-12-03T13:19:19.460 回答