Поделиться через


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

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

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

См. также