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


Параметры XML-запроса и сохраненные данные

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

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

Настройка необходимых параметров запроса

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

Параметры SET Необходимые значения
ANSI_NULLS DNS
ANSI_PADDING DNS
ANSI_WARNINGS DNS
ARITHABORT DNS
CONCAT_NULL_YIELDS_NULL DNS
NUMERIC_ROUNDABORT ВЫКЛ.
QUOTED_IDENTIFIER DNS

Если параметры не заданы, запросы и изменения методов типа данных 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-декларация () и ее атрибуты (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>

См. также