XML 쿼리 옵션 및 보존된 데이터

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

이 문서에서는 XML 데이터를 쿼리하기 위해 지정해야 하는 쿼리 옵션에 대해 설명합니다. 또한 데이터베이스에 저장될 때 보존되지 않는 XML 인스턴스의 부분에 대해서도 설명합니다.

필수 쿼리 옵션 설정

xml 데이터 형식 메서드를 사용하여 xml 형식 열 또는 변수를 쿼리하는 경우 다음과 같은 옵션을 설정해야 합니다.

SET 옵션 필요한 값
ANSI_NULLS ON
ANSI_PADDING ON
ANSI_WARNINGS ON
ARITHABORT ON
CONCAT_NULL_YIELDS_NULL ON
NUMERIC_ROUNDABORT OFF
QUOTED_IDENTIFIER ON

옵션을 표시된 대로 설정하지 않으면 xml 데이터 형식 메서드에 대한 쿼리 및 수정이 실패합니다.

보존되지 않는 XML 인스턴스의 기능

SQL Server는 XML 인스턴스의 콘텐츠를 유지하지만 XML 데이터 모델에서 중요하지 않은 XML 인스턴스의 측면을 유지하지는 않습니다. 즉, 검색된 XML 인스턴스는 서버에 저장된 인스턴스와 동일하지 않을 수 있지만 동일한 정보를 포함합니다.

XML 선언

인스턴스의 XML 선언은 인스턴스가 데이터베이스에 저장될 때 유지되지 않습니다. 예:

CREATE TABLE T1 (Col1 int primary key, Col2 xml);
GO
INSERT INTO T1 values (1, '<?xml version="1.0" encoding="windows-1252" ?><doc></doc>');
GO
SELECT Col2
FROM T1;

결과는 <doc/>입니다.

XML 선언(예: <?xml version='1.0'?>XML 데이터 형식 인스턴스)은 XML 데이터를 저장할 때 유지되지 않습니다. 이것은 의도적인 것입니다. 데이터가 형식 xml로 변환된 후 XML 선언() 및 해당 특성(버전/인코딩/독립 실행형)이 손실됩니다. XML 선언은 XML 파서에 대한 지시문으로 처리됩니다. XML 데이터는 내부적으로 ucs-2로 저장되며 XML 인스턴스의 다른 모든PI는 유지됩니다.

특성 순서

XML 인스턴스의 특성 순서는 유지되지 않습니다. xml 유형의 열에 저장된 XML 인스턴스를 쿼리할 때 결과 XML의 특성 순서는 원래 XML 인스턴스와 다를 수 있습니다.

특성 값에 대한 따옴표

특성 값에 대한 작은따옴표와 큰따옴표는 유지되지 않습니다. 특성 값은 이름 및 값의 쌍으로 데이터베이스에 저장됩니다. 따옴표는 저장되지 않습니다. XML 인스턴스에 대해 XQuery를 실행하면 결과 XML이 특성 값 주위에 큰따옴표로 serialize됩니다.

DECLARE @x xml;
-- Use double quotation marks.
SET @x = '<root a="1" />';
SELECT @x;
GO
DECLARE @x xml;
-- Use single quotation marks.
SET @x = '<root a=''1'' />';
SELECT @x;
GO

두 쿼리 모두 반환 = <root a="1" />.

네임스페이스 접두사

네임스페이스 접두사는 유지되지 않습니다. xml 형식 열에 대해 XQuery를 지정하면 직렬화된 XML 결과가 다른 네임스페이스 접두사를 반환할 수 있습니다.

DECLARE @x xml;
SET @x = '<ns1:root xmlns:ns1="abc" xmlns:ns2="abc">
            <ns2:SomeElement/>
          </ns1:root>';
SELECT @x;
SELECT @x.query('/*');
GO

결과의 네임스페이스 접두사는 다를 수 있습니다. 예:

<p1:root xmlns:p1="abc"><p1:SomeElement/></p1:root>

참고 항목