使用巢狀查詢處理FOR XML PATH 中的冗餘命名空間
在使用WITH XMLNAMESPACES 宣告預設命名空間的FOR XML PATH查詢中,冗餘命名空間聲明可能會出現在巢狀查詢的頂層節點中。為了解決這個問題,一個有效的解決方案是利用FOR XML EXPLICIT,如下所示:
DECLARE @Order TABLE (OrderID INT, OrderDate DATETIME)
DECLARE @OrderDetail TABLE (OrderDate DATETIME)
--初始化表
INSERT @Order VALUES (1, '2010-01-01'), (2, '2010-01-02')
INSERT @OrderDetail VALUES
(1, 'A', '喝', 5),
(1, 'B', '杯', 2),
(2, 'A', '飲料', 2),
(2, 'C', '吸管', 1),
-- 執行嵌套的FOR XML PATH 查詢
DECLARE @xml XML = (
OrderID AS "@OrderID", ( SELECT ItemID AS "@ItemID", Name AS "data()" FROM @OrderDetail WHERE OrderID = o.OrderID FOR XML PATH('Item'), TYPE )
FROM @Order o
FOR XML PATH('Order'), ROOT('dummyTag'), TYPE
-- 刪除多餘的命名空間並根節點使用FOR XML EXPLICIT
SELECT
1 AS標籤,
NULL AS父級,
@xml AS [xml!1!!xmltext],
'http://test.com/order' AS [xml!1!xmlns]
以上是如何消除嵌套 FOR XML PATH 查詢中的冗餘命名空間?的詳細內容。更多資訊請關注PHP中文網其他相關文章!