我试图从SQL数据库中检索一些XML列,并被一个" root"节点,但我发现很难找到正确的语法。
基本上,我在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>'
...我想像这样生成XML ......
<ORDERS>
<ORDER>
<ORDER_ID>123</ORDER_ID>
</ORDER>
<ORDER>
<ORDER_ID>456</ORDER_ID>
</ORDER>
</ORDERS>
我认为这将是&#34; root&#34;的变体。子句,为了让根节点成为&#34; ORDERS&#34;,但我似乎无法摆脱&#34;细节&#34;每个&#34;记录&#34;周围的父节点。即
select details
from @changes
for xml path(''), root('ORDERS')
感谢。
修改
我已经按照以下方式完成了我需要的工作,但这是最好的方法吗?
select details.query('/ORDER')
from @changes
for xml path(''), root('ORDERS')
答案 0 :(得分:0)
您不需要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')
<强> SQL Fiddle 强>
结果:
<ORDERS>
<ORDER>
<ORDER_ID>123</ORDER_ID>
</ORDER>
<ORDER>
<ORDER_ID>456</ORDER_ID>
</ORDER>
</ORDERS>
您是否考虑过不在列中添加ORDER
标记?
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')