Поделиться через


Получение и запрос XML-данных

В этом разделе описываются параметры запроса, которые необходимо указать для запроса XML-данных. Кроме того, в нем описаны компоненты экземпляров XML, нефиксируемых при сохранении экземпляров в базах данных.

В этом разделе

  • Компоненты экземпляра XML, которые не сохраняются

  • Задание обязательных параметров запроса

Компоненты экземпляра XML, которые не сохраняются

В SQL Server сохраняется содержимое экземпляра 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... ?>) и ее атрибуты (version/encoding/stand-alone) будут утеряны после преобразования данных в тип xml. XML-декларация обрабатывается как директива для синтаксического анализатора XML. Все данные XML внутренне хранятся в кодировке UCS-2. Все другие инструкции по обработке (PI) в экземпляре XML сохраняются.

[В начало]

Порядок атрибутов

Порядок атрибутов экземпляра XML не сохраняется. При запросе экземпляра XML, хранящегося в столбце типа xml, порядок атрибутов в результирующем XML может отличаться от порядка в исходном экземпляре XML.

[В начало]

Кавычки вокруг значений атрибутов

Одинарные и двойные кавычки вокруг значений атрибутов не сохраняются. Значения атрибутов хранятся в базе данных в виде пар имени и значения. Кавычки не хранятся. При выполнении запроса XQuery к экземпляру XML результирующий 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" />.

[В начало]

Префиксы пространства имен

Префиксы пространств имен не сохраняются. При выполнении запроса XQuery к столбцу типа xml для сериализации результирующего 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>

[В начало]

Задание обязательных параметров запроса

При запросе столбцов или переменных с типом данных 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-данных