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

Применимо к:база данныхSQL Server Azure SQL Управляемый экземпляр SQL Azure

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

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

Эти функции можно в любое время использовать совместно с методами, предназначенными для типа данных 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() также можно применять описанным образом, что позволяет получить дополнительные преимущества. Для повышения эффективности могут использоваться индексы столбца — это решает оптимизатор запросов на основе траты ресурсов. В вычисляемом столбце можно хранить свойство, для которого было выполнено продвижение.

См. также: