Sql 从xml节点中选择节点
那里!有一个小xmlSql 从xml节点中选择节点,sql,sql-server,xml,Sql,Sql Server,Xml,那里!有一个小xml Declare @xmlDoc xml = ' <ROW ID="471869" USER_ID="40161" NAME="James" CNT="2" /> <ROW ID="482047" USER_ID="40836" NAME="Nick" CNT="2" /> ' 结果是这样的
Declare @xmlDoc xml = '
<ROW ID="471869" USER_ID="40161" NAME="James" CNT="2" />
<ROW ID="482047" USER_ID="40836" NAME="Nick" CNT="2" />
'
结果是这样的
| ID | USER_ID | NAME | CNT |
| -------- | -------- | ------- | --- |
| 471869 | 40161 | James | 2 |
| 482047 | 40836 | Nick | 2 |
| ID | USER_ID | NAME | CNT | ROW |
| -------- | -------- | ------- | --- | -------------------------------------------------------- |
| 471869 | 40161 | James | 2 | <ROW ID="471869" USER_ID="40161" NAME="James" CNT="2" /> |
| 482047 | 40836 | Nick | 2 | <ROW ID="482047" USER_ID="40836" NAME="Nick" CNT="2" /> |
但是,需要有一个包含整行内容的列,如下所示
| ID | USER_ID | NAME | CNT |
| -------- | -------- | ------- | --- |
| 471869 | 40161 | James | 2 |
| 482047 | 40836 | Nick | 2 |
| ID | USER_ID | NAME | CNT | ROW |
| -------- | -------- | ------- | --- | -------------------------------------------------------- |
| 471869 | 40161 | James | 2 | <ROW ID="471869" USER_ID="40161" NAME="James" CNT="2" /> |
| 482047 | 40836 | Nick | 2 | <ROW ID="482047" USER_ID="40836" NAME="Nick" CNT="2" /> |
使用查询方法
cc类型是XML
这对我有用
SELECT x.value('(@ID)[1]', 'int') AS ID,
x.value('(@USER_ID)[1]', 'int') AS USER_ID,
x.value('(@NAME)[1]', 'varchar(100)') AS NAME,
x.value('(@CNT)[1]', 'int') AS CNT,
@xmlDoc.query('.') as cc
from @xmlDoc.nodes('/ROW') AS t(x)
这个。选择当前节点。我强烈建议您查看上的XML教程。我花了几年时间断断续续地处理xml,但从未花时间深入研究它。一旦你了解了它的工作原理,这就容易多了。这里有一个很好的例子:
TBF他们正在使用查询。他们只是没有使用正确的语法返回当前节点。不工作吗?返回所有rowstory,运行良好,x.query而不是@xmlDoc.query
Declare @xmlDoc xml = '
<ROW ID="471869" USER_ID="40161" NAME="James" CNT="2" />
<ROW ID="482047" USER_ID="40836" NAME="Nick" CNT="2" />
'
SELECT x.value('(@ID)[1]', 'int') AS ID,
x.value('(@USER_ID)[1]', 'int') AS USER_ID,
x.value('(@NAME)[1]', 'varchar(100)') AS NAME,
x.value('(@CNT)[1]', 'int') AS CNT,
x.query('.') as EntireXmlRow
from @xmlDoc.nodes('/ROW') AS t(x)