>데이터 베이스 >MySQL 튜토리얼 >중첩된 FOR XML PATH 쿼리에서 중복 네임스페이스를 제거하는 방법은 무엇입니까?

중첩된 FOR XML PATH 쿼리에서 중복 네임스페이스를 제거하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-05 17:57:40277검색

How to Eliminate Redundant Namespaces in Nested FOR XML PATH Queries?

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.