예: XMLTEXT 지시문 지정
적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance
이 예제에서는 EXPLICIT 모드를 사용하는 문에서 XMLTEXT 지시문을 사용하여 오버플로 열의 SELECT
데이터를 처리하는 방법을 보여 줍니다.
테이블을 고려합니다 Person
. 이 표에는 Overflow
XML 문서의 미해결 부분을 저장하는 열이 있습니다.
USE tempdb;
GO
CREATE TABLE Person(PersonID varchar(5), PersonName varchar(20), Overflow nvarchar(200));
GO
INSERT INTO Person VALUES
('P1','Joe',N'<SomeTag attr1="data">content</SomeTag>')
,('P2','Joe',N'<SomeTag attr2="data"/>')
,('P3','Joe',N'<SomeTag attr3="data" PersonID="P">content</SomeTag>');
이 쿼리는 테이블에서 열을 검색합니다 Person
. 열의 Overflow
경우 AttributeName은 지정되지 않지만 지시문은 범용 테이블 열 이름을 제공하는 일부로 설정 XMLTEXT
됩니다.
SELECT 1 as Tag, NULL as parent,
PersonID as [Parent!1!PersonID],
PersonName as [Parent!1!PersonName],
Overflow as [Parent!1!!XMLTEXT] -- No AttributeName; XMLTEXT directive
FROM Person
FOR XML EXPLICIT;
결과 XML 문서에서 다음을 수행합니다.
AttributeName은 열
xmltext
에 대해Overflow
지정되지 않고 지시문이 지정되므로 요소의<overflow>
특성이 바깥쪽<Parent>
요소의 특성 목록에 추가됩니다.요소의
<xmltext>
특성이PersonID
동일한 요소 수준에서 검색된 특성과PersonID
충돌하기 때문에 NULL인 경우에도PersonID
요소의<xmltext>
특성은 무시됩니다. 특성은 일반적으로 오버플로의 동일한 이름의 특성에 우선합니다.
결과는 다음과 같습니다.
<Parent PersonID="P1" PersonName="Joe" attr1="data">content</Parent>
<Parent PersonID="P2" PersonName="Joe" attr2="data"></Parent>
<Parent PersonID="P3" PersonName="Joe" attr3="data">content</Parent>
오버플로 데이터에 하위 요소가 있고 동일한 쿼리가 지정되면 열의 Overflow
하위 요소가 바깥쪽 <Parent>
요소의 하위 요소로 추가됩니다.
예를 들어 열에 하위 행이 Person
있도록 테이블의 Overflow
데이터를 변경합니다.
USE tempdb;
GO
TRUNCATE TABLE Person;
GO
INSERT INTO Person VALUES
('P1','Joe',N'<SomeTag attr1="data">content</SomeTag>')
,('P2','Joe',N'<SomeTag attr2="data"/>')
,('P3','Joe',N'<SomeTag attr3="data" PersonID="P"><name>PersonName</name></SomeTag>');
동일한 쿼리가 실행되면 요소의 하위 <xmltext>
요소가 바깥쪽 <Parent>
요소의 하위 요소로 추가됩니다.
SELECT 1 as Tag, NULL as parent,
PersonID as [Parent!1!PersonID],
PersonName as [Parent!1!PersonName],
Overflow as [Parent!1!!XMLTEXT] -- no AttributeName, XMLTEXT directive
FROM Person
FOR XML EXPLICIT;
결과는 다음과 같습니다.
<Parent PersonID="P1" PersonName="Joe" attr1="data">content</Parent>
<Parent PersonID="P2" PersonName="Joe" attr2="data"></Parent>
<Parent PersonID="P3" PersonName="Joe" attr3="data">
<name>PersonName</name>
</Parent>
AttributeName을 지시문으로 xmltext
지정하면 요소의 <overflow>
특성이 바깥쪽 <Parent>
요소의 하위 요소 특성으로 추가됩니다. AttributeName에 지정된 이름은 하위 요소의 이름이 됩니다.
이 쿼리에서 AttributeName<overflow>
은 지시문*:* 함께 xmltext
지정됩니다.
SELECT 1 as Tag, NULL as parent,
PersonID as [Parent!1!PersonID],
PersonName as [Parent!1!PersonName],
Overflow as [Parent!1!overflow!XMLTEXT] -- Overflow is AttributeName
-- XMLTEXT is a directive
FROM Person
FOR XML EXPLICIT;
결과는 다음과 같습니다.
<Parent PersonID="P1" PersonName="Joe">
<overflow attr1="data">content</overflow>
</Parent>
<Parent PersonID="P2" PersonName="Joe">
<overflow attr2="data" />
</Parent>
<Parent PersonID="P3" PersonName="Joe">
<overflow attr3="data" PersonID="P">
<name>PersonName</name>
</overflow>
</Parent>
이 쿼리 요소에서 지시문 은 특성에 대해 PersonName
지정됩니다. 그러면 PersonName
바깥쪽 <Parent>
요소의 하위 요소로 추가됩니다. <xmltext>
특성은 여전히 바깥쪽 <Parent>
요소에 추가됩니다. 요소의 <overflow>
내용인 하위 요소 앞에 바깥 <Parent>
쪽 요소의 다른 하위 요소 앞에 추가됩니다.
SELECT 1 AS Tag, NULL as parent,
PersonID AS [Parent!1!PersonID],
PersonName AS [Parent!1!PersonName!element], -- element directive
Overflow AS [Parent!1!!XMLTEXT]
FROM Person
FOR XML EXPLICIT;
결과는 다음과 같습니다.
<Parent PersonID="P1" attr1="data">content<PersonName>Joe</PersonName>
</Parent>
<Parent PersonID="P2" attr2="data">
<PersonName>Joe</PersonName>
</Parent>
<Parent PersonID="P3" attr3="data">
<name>PersonName</name>
<PersonName>Joe</PersonName>
</Parent>
XMLTEXT
열 데이터에 루트 요소의 특성이 포함된 경우 이러한 특성은 XML 데이터 스키마에 표시되지 않으며 MSXML 파서는 결과 XML 문서 조각의 유효성을 검사하지 않습니다. 예:
SELECT 1 AS Tag,
0 AS Parent,
N'<overflow a="1"/>' AS 'overflow!1!!xmltext'
FOR XML EXPLICIT, xmldata;
이것이 결과입니다. 반환된 스키마에서 오버플로 특성 a
이 스키마에서 누락되었습니다.
<Schema name="Schema2"
xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes">
<ElementType name="overflow" content="mixed" model="open">`
</ElementType>`
</Schema>`
<overflow xmlns="x-schema:#Schema2" a="1">
</overflow>
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기