다음을 통해 공유


XML 데이터 검색

SQL Server에서는 XML 인스턴스의 내용을 보존하지만 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 데이터 형식 인스턴스에 저장될 때 <?xml version='1.0'?>과 같은 XML 선언이 보존되지 않습니다. 이것은 의도적인 것입니다. XML 선언(<?xml ... ?>)과 해당 특성(version/encoding/stand-alone)은 데이터가 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>

참고 항목

개념