ホームページ >データベース >mysql チュートリアル >ネストされた FOR XML PATH クエリで冗長な名前空間を削除するにはどうすればよいですか?
ネストされたクエリを使用した FOR XML PATH での冗長な名前空間の処理
デフォルトの名前空間が WITH XMLNAMESPACES を使用して宣言されている FOR XML PATH クエリでは、冗長です名前空間宣言は、ネストされたクエリの最上位ノードに現れる場合があります。この問題に対処するための効果的な解決策の 1 つは、次に示すように、FOR XML EXPLICIT を活用することです。
DECLARE @Order TABLE (OrderID INT, OrderDate DATETIME)
DECLARE @OrderDetail TABLE (OrderID INT, itemID VARCHAR( 1)、名前 VARCHAR(50)、数量 INT)
-- を初期化しますテーブル
INSERT @Order VALUES (1, '2010-01-01'), (2, '2010-01-02')
INSERT @OrderDetail VALUES
(1, 'A', 'Drink ', 5),
(1, 'B', 'カップ', 2),
(2, 'A', 'ドリンク', 2),
(2, 'C', 'ストロー', 1),
(2, 'D', 'ナプキン' 、1)
-- ネストされた FOR XML PATH クエリを実行します
DECLARE @xml XML = (
SELECT
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 EXPLICIT
このクエリの組み合わせは、先頭の必要な宣言を保持しながら、ネストされたクエリから冗長な名前空間を効果的に削除します。 レベル。結果は、単一の適切な名前空間を持つルート要素を含む整形式の XML ドキュメントです。
以上がネストされた FOR XML PATH クエリで冗長な名前空間を削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。