簡體   English   中英

如何使用SQL選擇帶有根節點的XML列?

[英]How to use SQL to select XML columns with a root node?

我試圖從一個“根”節點包圍的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>'

...我想生成這樣的XML ...

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

為了使根節點成為“ ORDERS”,我認為這將是“ root”子句的一種變體,但是我似乎無法擺脫每個“記錄”周圍的“詳細信息”父節點。 即。

select details
from @changes
for xml path(''), root('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')

SQL小提琴

結果:

<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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM