Привязка реляционных данных внутри XML-данных
Область применения: SQL Server
База данных SQL Azure Управляемый экземпляр SQL Azure
Можно указать методы типа данных xml для переменной или столбца типа данных xml. Например, метод query() (тип данных xml) выполняет указанный запрос XQuery к экземпляру XML. При построении XML таким способом может понадобиться ввести значение их столбца с типом данных, отличным от XML или переменной Transact-SQL. Данный процесс называется привязкой реляционных данных внутри XML.
Для привязки реляционных данных с типом, отличным от 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() также можно применять описанным образом, что позволяет получить дополнительные преимущества. Для повышения эффективности могут использоваться индексы столбца — это решает оптимизатор запросов на основе траты ресурсов. В вычисляемом столбце можно хранить свойство, для которого было выполнено продвижение.