"WITH XMLNAMESPACES"를 사용하여 기본 네임스페이스, 중첩 쿼리를 정의하는 "FOR XML PATH" 쿼리의 컨텍스트에서 최상위 수준에서 중복된 네임스페이스 선언을 도입할 수 있습니다. 이 문제는 하위 쿼리가 중첩 쿼리 내에서 "FOR XML PATH"를 사용할 때 발생합니다.
다음 쿼리를 고려하세요.
... select a.c2 as "@species" , (select l.c3 as "text()" from t2 l where l.c2 = a.c1 for xml path('leg'), type) as "legs" from t1 a for xml path('animal'), root('zoo') ...
여기서 "legs"는 "legs"의 "uri:animal"에 대한 추가 네임스페이스 선언을 생성합니다. element.
이 중복성을 제거하려면 하위 쿼리의 "FOR XML PATH"와 기본 쿼리의 "FOR XML EXPLICIT" 조합을 사용할 수 있습니다. 이 접근 방식에는 "FOR XML EXPLICIT" 쿼리에서 "xmltext" 지시문을 사용하여 가장 바깥쪽 네임스페이스 선언을 억제하는 작업이 포함됩니다.
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) SELECT 1 AS Tag ,NULL AS Parent ,@xml AS [xml!1!!xmltext] ,'http://test.com/order' AS [xml!1!xmlns] FOR XML EXPLICIT
결과는 다음과 같습니다.
<xml xmlns="http://test.com/order"> <Order OrderID="1"> <Item ItemID="A">Drink</Item> <Item ItemID="B">Cup</Item> </Order> <Order OrderID="2"> <Item ItemID="A">Drink</Item> <Item ItemID="C">Straw</Item> <Item ItemID="D">Napkin</Item> </Order> </xml>
이 기술은 다음을 제공합니다. 루트 노드에서 단일 네임스페이스 선언을 유지하면서 중첩된 쿼리에 대한 "FOR XML PATH"의 유연성을 제공합니다.
위 내용은 중첩된 'FOR XML PATH' 쿼리에서 중복 네임스페이스 선언을 제거하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!