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

적용 대상: SQL Server Azure SQL Database Azure 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이 특성 값 주위에 큰따옴표로 직렬화됩니다.

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>

참고 항목