중첩 쿼리를 사용하여 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!