ms sql xml поле

xml (Transact-SQL)

Тип данных, в котором хранятся XML-данные. Можно хранить экземпляры xml в столбце либо в переменной типа xml.

Синтаксические обозначения в Transact-SQL

Синтаксис

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.

Аргументы

CONTENT
Экземпляр xml должен быть XML-фрагментом правильного формата. XML-данные могут содержать несколько (0 или больше) элементов верхнего уровня. Текстовые узлы разрешены на верхнем уровне.

Это поведение по умолчанию.

DOCUMENT
Экземпляр xml должен быть XML-документом правильного формата. XML-данные должны содержать только один корневой элемент. Текстовые узлы на верхнем уровне запрещены.

xml_schema_collection
Имя коллекции XML-схем. Чтобы создать типизированный столбец или переменную xml, можно дополнительно указать имя коллекции XML-схем. Дополнительные сведения о типизированном и нетипизированном XML см. в разделе Сравнение типизированного и нетипизированного XML.

Remarks

Размер хранимого представления экземпляров типа данных xml не может превышать 2 ГБ.

Аспекты CONTENT и DOCUMENT применяются только к типизованным XML. Дополнительные сведения см. в статье Сравнение типизированного и нетипизированного XML.

Источник

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

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

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

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

XML-декларация

XML-декларация экземпляра не сохраняется при сохранении экземпляра в базе данных. Пример:

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

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

Одинарные и двойные кавычки вокруг значений атрибутов не сохраняются. Значения атрибутов хранятся в базе данных в виде пар имени и значения. Кавычки не хранятся. При выполнении запроса XQuery к экземпляру XML результирующий XML сериализуется с использованием двойных кавычек вокруг значений атрибутов.

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

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

Тип данных xml — это встроенный в SQL Server тип данных, несколько напоминающий другие встроенные типы данных, такие как int и varchar. Как и другие встроенные типы данных, тип данных xml можно использовать как тип столбца при создании таблицы, как тип переменной, параметра, тип возвращаемого функцией значения, а также в инструкциях CAST и CONVERT.

Создание столбцов и переменных

Чтобы выполнять запросы к экземплярам XML, хранимым в столбцах, параметрах и переменных, можно использовать XQuery. Чтобы обновлять экземпляры XML, также можно использовать язык XML DML. Поскольку стандарт XQuery на момент разработки не определял язык XQuery DML, в SQL Server были введены расширения языка XML DML к XQuery. Эти расширения позволяют выполнять операции вставки, обновления и удаления.

Назначение значений по умолчанию

Указание ограничений

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

В ограничении фигурируют другие столбцы таблицы, имеющие тип XML или другой тип. В качестве примера можно привести требование, согласно которому идентификатор заказчика ( /Customer/@CustId ), хранимый в экземпляре XML, должен соответствовать значению из реляционного столбца CustomerID.

PRIMARY KEY и FOREIGN KEY

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

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

Теперь возможно создание таблицы с ограничениями на уровне столбцов, как показано ниже:

Эта операция вставки выполняется успешно:

Из-за ограничения следующая операция вставки не будет выполнена:

Та же таблица или другая

Столбец типа xml можно создать в таблице, содержащей другие реляционные столбцы, или в таблице, связанной посредством внешнего ключа с главной таблицей.

Столбец типа xml следует создавать в той же таблице, если выполняется одно из перечисленных ниже условий.

Приложение извлекает данные из XML-столбца и не нуждается в том, чтобы для него был создан XML-индекс.

Для столбца типа xml требуется создание XML-индекса, причем первичный ключ главной таблицы идентичен ее ключу кластеризации. Дополнительные сведения см в разделе XML-индексы (SQL Server).

Столбец типа xml следует создавать в отдельной таблице, если выполняются перечисленные ниже условия.

Для столбца типа xml требуется создание XML-индекса, но первичный ключ главной таблицы отличается от ее ключа кластеризации, главная таблица не имеет первичного ключа или главная таблица является кучей (нет ключа кластеризации). Это может иметь место, если главная таблица уже существует.

Не требуется замедлять просмотр таблицы из-за наличия в ней XML-столбца. Он занимает место независимо от того, хранится ли он в строке или вне строки.

Источник

Загрузка XML-данных

Если в базе данных SQL Server данные хранятся в столбце типа [n]text или image, то эту таблицу можно импортировать с помощью служб Службы Integration Services. Изменить тип столбца на XML можно с использованием инструкции ALTER TABLE.

Массовое копирование данных из другой базы данных SQL Server можно выполнить с использованием команды bcp out, после чего с помощью команды bcp in произвести массовую вставку данных в базу данных более поздней версии.

Массовая загрузка XML-данных

Массовую загрузку XML-данных на сервер можно осуществить при помощи реализованных в SQL Serverсредств массовой загрузки, таких как bcp. Инструкция OPENROWSET позволяет загрузить данные в XML-столбец из файлов. Это показано в следующем примере.

Пример Загрузка XML-данных из файлов

Следующий пример показывает, как вставить строку в таблицу T. Значение XML-столбца загружается из файла «C:\MyFile\xmlfile.xml» как объект CLOB, а целочисленному столбцу назначается значение 10.

Кодировка текста

SQL Server хранит XML-данные в кодировке Юникод (UTF-16). XML-данные, извлекаемые из баз данных сервера, предоставляются в кодировке UTF-16. Если требуются данные в другой кодировке, извлеченные данные нужно преобразовать. Иногда XML-данные могут быть представлены в другой кодировке. Если это так, во время загрузки данных нужно быть внимательным. Пример:

Если текст XML представлен в кодировке Юникод (UCS-2, UTF-16), можно назначить его XML-столбцу, переменной или параметру без каких-либо проблем.

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

Пример явное указание кодировки

Несоответствия кодировок строк

При копировании и вставке XML как строкового литерала в окно редактора запросов служб в среде SQL Server Management Studioмогут возникнуть несоответствия с кодировкой строк типа (N)VARCHAR. Это будет зависеть от кодировки копируемого экземпляра XML. Во многих случаях может возникнуть необходимость удаления XML-декларации. Пример:

Затем нужно будет добавить N, чтобы сделать экземпляр XML экземпляром Юникода. Пример:

Источник

Метод value() (тип данных xml)

Выполняет запрос XQuery к структуре XML и возвращает значение типа SQL. Данный метод возвращает скалярное значение.

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

Синтаксис

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.

Аргументы

XQuery
Выражение XQuery — строковый литерал, извлекающий данные из экземпляра XML. Выражение XQuery должно возвращать не более одного значения. Иначе возвращается ошибка.

SQLType
Предпочтительный тип SQL — строковый литерал, который необходимо вернуть. Тип возвращаемого этим методом значения соответствует значению параметра SQLType. SQLType не может быть типом данных xml, определяемым пользователем типом CLR, типом данных image, text, ntext или sql_variant. Значением SQLType может быть SQL и определяемый пользователем тип данных.

Метод value() неявно использует оператор CONVERT Transact-SQL и пытается преобразовать результат выражения XQuery, сериализованное строковое представление, из типа данных XSD в соответствующий тип SQL, указанный преобразованием языка Transact-SQL. Дополнительные сведения о правилах приведения типов для оператора CONVERT см. в разделе CAST и CONVERT (Transact-SQL).

Примеры

A. Использование метода value() над переменной типа xml

В результате возвращается значение 1.

Б. Использование метода value() для извлечения значения из столбца типа xml

Обратите внимание на следующие данные из предыдущего запроса:

Требования к статической типизации в выражении пути обязывают в методе [1] добавлять value() в конце выражения пути, чтобы явно указать, что оно возвращает единственное значение.

В. Использование методов value() и exist() для извлечения значений из столбца типа xml

В следующем примере демонстрируется совместное использование методов value() и exist(), возвращающих тип данных xml. Метод value() извлекает значения атрибутов ProductModelID из экземпляров XML. Метод exist() в предложении WHERE фильтрует строки, извлеченные из таблицы.

Запрос извлекает идентификаторы моделей продуктов из экземпляров XML, которые среди прочих данных содержат сведения о гарантии (элемент Warranty >). Условие в предложении WHERE приводит к тому, что метод exist() извлекает только те строки, которые соответствуют условию.

Обратите внимание на следующие данные из предыдущего запроса:

Столбец CatalogDescription является типизированным XML-столбцом. Это означает, что с ним связан набор схем. В XQuery Prolog объявлено пространство имен, определяющее префикс, который затем используется в теле запроса.

Если метод exist() возвращает значение 1 (True), это значит, что экземпляр XML содержит дочерний элемент Warranty >.

Метод value() в предложении SELECT затем извлекает значения атрибутов ProductModelID в виде целых чисел.

Г. Использование метода exist() вместо метода value()

Источник

Читайте также:  двери мдф в костроме
Обучающий онлайн портал