Привязка реляционных данных внутри XML-данных

Методы XML (Методы типа данных XML) можно применять к переменной или столбцу типа данных xml. Например, query() (тип данных xml) выполняет заданный запрос XQuery к экземпляру XML. При построении XML таким способом может понадобиться ввести значение их столбца с типом данных, отличным от XML или переменной Transact-SQL. Данный процесс называется привязкой реляционных данных внутри XML.

Применимо для следующих объектов: SQL Server (SQL Server 2008 по текущую версию), База данных SQL Windows Azure (С первоначального выпуска по текущий выпуск).

Для привязки реляционных данных с типом, отличным от XML, внутри XML компонент SQL Server Database Engine обладает следующими псевдофункциями:

  • Функция sql:column() (XQuery). Позволяет использовать значения реляционного столбца в выражении XQuery или XML DML.

  • sql:variable() (XQuery) . Позволяет использовать значения переменной SQL в выражении XQuery или XML DML.

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

Нельзя использовать эти функции для создания ссылок на данные в столбцах или переменных, относящихся к типам xml, определяемым пользователем типам данных CLR, а также к типам данных datetime, smalldatetime, text, ntext, sql_variant и image.

Однако данная привязка доступна только для чтения, то есть нельзя записывать данные в столбцы, использующие эти функции. Например, запись sql:переменная("@x")="некоторое выражение" недопустима.

Пример: запрос между доменами с использованием функции sql:variable()

В этом примере показано, как sql:variable() позволяет приложению подготовить параметризованный запрос. ISBN-номер передается в функцию как SQL-переменная @isbn. Заменив константу функцией sql:variable(), можно использовать этот запрос для поиска любого ISBN-номера, а не только 0-7356-1588-2.

DECLARE @isbn varchar(20)
SET     @isbn = '0-7356-1588-2'
SELECT  xCol
FROM    T
WHERE   xCol.exist ('/book/@ISBN[. = sql:variable("@isbn")]') = 1

Функцию sql:column() также можно применять описанным образом, что позволяет получить дополнительные преимущества. Для повышения эффективности могут использоваться индексы столбца — это решает оптимизатор запросов на основе траты ресурсов. В вычисляемом столбце можно хранить свойство, для которого было выполнено продвижение.

См. также

Другие ресурсы

Методы типа данных XML