집 >데이터 베이스 >MySQL 튜토리얼 >중첩된 FOR XML PATH 쿼리에서 중복 네임스페이스를 제거하는 방법은 무엇입니까?
중첩 쿼리를 사용하여 FOR XML PATH에서 중복 네임스페이스 처리
WITH XMLNAMESPACES를 사용하여 기본 네임스페이스가 선언되는 FOR XML PATH 쿼리에서 중복 네임스페이스 선언은 중첩 쿼리의 최상위 노드에 나타날 수 있습니다. 이 문제를 해결하기 위한 한 가지 효과적인 솔루션은 아래와 같이 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', ' 음료', 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]
XML 명시적용
이러한 쿼리 조합은 최상위 수준에서 필요한 선언을 유지하면서 중첩된 쿼리에서 중복된 네임스페이스를 효과적으로 제거합니다. 그 결과, 적절하게 네임스페이스가 지정된 단일 루트 요소가 포함된 올바른 형식의 XML 문서가 탄생했습니다.
위 내용은 중첩된 FOR XML PATH 쿼리에서 중복 네임스페이스를 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!