Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从xml节点中选择节点_Sql_Sql Server_Xml - Fatal编程技术网

Sql 从xml节点中选择节点

Sql 从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" /> ' 结果是这样的

那里!有一个小xml

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)