Sql server 如何使用SQL选择具有根节点的XML列?
我试图从一个SQL数据库中检索一些XML列,其中包含一个“根”节点,但我发现很难找到正确的语法 基本上,我在一个XML列中有详细信息,我希望返回一个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)
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')