XML列数据成行

时间:2017-10-30 14:37:21

标签: sql sql-server-2008-r2

我有一个要求,我在数据库中有XML数据列,我需要从数据库中的行XML数据列中提取值的形式。我的XML就像

 <ListID><ID>169346</ID><ID>289492</ID><ID>315264</ID><ID>415265</ID></ListID>
 <ListID><ID>169356</ID><ID>299492</ID><ID>315264</ID><ID>415265</ID></ListID>

我希望数据像

一样上拉
       ID
      169346
      289492
      315264
      415265
      169356
      299492
      315264
      415265

2 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

SELECT XC.value('.', 'int')
FROM dbo.YourTableHere
CROSS APPLY XmlColumn.nodes('//ID') AS XT(XC)

这基本上采用XML列中存在的每个<ID>元素,并将值提取为int并在结果集中显示它们。

从您的问题

更新,提及我有XML数据列,我假设您的SQL Server表中的列实际上是类型为XML。它应该是,如果你在其中存储XML!

但如果不是 - 那么在我的代码示例中使用函数.nodes()之前,您需要先将列转换为XML:

SELECT XC.value('.', 'int')
FROM dbo.YourTableHere
CROSS APPLY CAST(YourColumn AS XML).nodes('//ID') AS XT(XC)

答案 1 :(得分:0)

另一种方法是将其转换为XML&amp;然后将其转换为行:

SELECT split.a.value('.', 'varchar(max)') ID
FROM
(
    SELECT CAST(ID AS XML) AS String from <table_name>
) a
CROSS APPLY String.nodes('//ID') AS split(a);

结果:

ID
169346
289492
315264
415265
169356
299492
315264
415265