Параметры 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>