Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.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 server 如何使用SQL选择具有根节点的XML列?_Sql Server_Xml - Fatal编程技术网

Sql server 如何使用SQL选择具有根节点的XML列?

Sql server 如何使用SQL选择具有根节点的XML列?,sql-server,xml,Sql Server,Xml,我试图从一个SQL数据库中检索一些XML列,其中包含一个“根”节点,但我发现很难找到正确的语法 基本上,我在一个XML列中有详细信息,我希望返回一个XML结果,将所有列分组为父节点的子节点 所以。。。鉴于此: declare @changes table (order_no varchar(10), details xml) insert into @changes values ('123', null) insert into @changes values ('456', null)

我试图从一个SQL数据库中检索一些XML列,其中包含一个“根”节点,但我发现很难找到正确的语法

基本上,我在一个XML列中有详细信息,我希望返回一个XML结果,将所有列分组为父节点的子节点

所以。。。鉴于此:

declare @changes table (order_no varchar(10), details xml)

insert into @changes values ('123', null)
insert into @changes values ('456', null)

update @changes set details = '<ORDER><ORDER_ID>' + order_no + '</ORDER_ID></ORDER>'
谢谢

编辑:

<ORDERS>
  <ORDER>
    <ORDER_ID>123</ORDER_ID>
  </ORDER>
  <ORDER>
    <ORDER_ID>456</ORDER_ID>
  </ORDER>
</ORDERS>
我用下面的方法做了我需要的,但这是最好的方法吗

select details.query('/ORDER')
from @changes
for xml path(''), root('ORDERS')

您不需要XML列

DECLARE @changes TABLE (order_no VARCHAR(10))

INSERT INTO @changes VALUES ('123')
INSERT INTO @changes VALUES ('456')

SELECT order_no AS ORDER_ID
FROM @changes
FOR XML PATH('ORDER'), ROOT('ORDERS')

结果:

<ORDERS>
  <ORDER>
    <ORDER_ID>123</ORDER_ID>
  </ORDER>
  <ORDER>
    <ORDER_ID>456</ORDER_ID>
  </ORDER>
</ORDERS>

你需要它吗?它是一个表变量,所以你可以用它做任何你想做的事情。。。实际上,我从一个函数返回了XML。我想为每个订单保存XML,但之前我从函数返回了XML,其中包含根节点,但从保存的列中获取XML(包含根节点)时遇到了问题。在我看来,如果您可以更改函数以输出所需内容,最好从每行中删除“order”标记。这样可以保持简单,并且不必查询每个xml来获取内部节点。
<ORDERS>
  <ORDER>
    <ORDER_ID>123</ORDER_ID>
  </ORDER>
  <ORDER>
    <ORDER_ID>456</ORDER_ID>
  </ORDER>
</ORDERS>
DECLARE @changes TABLE (order_no VARCHAR(10), details XML)

INSERT INTO @changes VALUES ('123', NULL)
INSERT INTO @changes VALUES ('456', NULL)

UPDATE @changes 
SET details = '<ORDER_ID>' + order_no + '</ORDER_ID>'


SELECT details AS ORDER
FROM @changes
FOR XML PATH(''), ROOT('ORDERS')