将XML节点转换为SQL Server中的行

时间:2014-03-17 10:51:32

标签: sql-server xml sql-server-2012

考虑以下示例:

declare @somexml as xml

set @somexml = '
<Settings>
    <Users>
        <ID>1</ID>
        <ID>2</ID>
        <ID>3</ID>
        <ID>4</ID>
        <ID>5</ID>
    </Users>
</Settings>'

上面的XML有一些ID值,我需要转换为可以在临时表中使用的数据行来执行连接。

我无法正确理解语法,我已经尝试了一些我遇到的样本:

SELECT T.r.value('.','int') as id
FROM @somexml.nodes('/Settings/Users') T(r)

返回:

|ID    |
|------|
|12345 |

以下内容:

SELECT T.r.query('.') as id
from @somexml.nodes('/Settings/Users/ID') as T(r) 

返回:

|ID         |
|-----------|
|<ID>1</ID> |
|<ID>2</ID> |
|<ID>3</ID> |
|<ID>4</ID> |
|<ID>5</ID> |

我越来越近了,但我想删除XML代码,只留下ID值,如下所示:

|ID |
|---|
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |

如果你想以这种方式玩/解决,这里有一个小提琴:SQL Fiddle

任何帮助都会一如既往地受到赞赏。

2 个答案:

答案 0 :(得分:5)

T.r.query('.') as id替换为T.r.value('.', 'INT') as id

答案 1 :(得分:0)

SELECT T.r.value('.','int') as id
FROM @somexml.nodes('/Settings/Users/ID') T(r)