考虑以下示例:
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
任何帮助都会一如既往地受到赞赏。
答案 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)