Функции расширения XQuery — sql:variable()
Область применения: SQL Server
Представляет переменную, которая содержит реляционное значение SQL внутри выражения XQuery.
Синтаксис
sql:variable("variableName") as xdt:anyAtomicType?
Замечания
Как описано в разделе Привязка реляционных данных внутри XML, эту функцию можно использовать при использовании методов типа данных XML для предоставления реляционного значения внутри XQuery.
Например, метод query() используется для указания запроса к экземпляру XML, хранящейся в переменной типа данных XML или столбце. Иногда может потребоваться, чтобы запрос использовал значения из переменной Transact-SQL или параметра для объединения реляционных и XML-данных. Для этого используется функция sql:variable .
Значение SQL будет сопоставлено с соответствующим значением XQuery, а в качестве типа этого значения будет присвоен базовый тип XQuery, эквивалентный соответствующему типу SQL.
Можно ссылаться только на экземпляр XML в контексте исходного выражения инструкции вставки XML-DML; в противном случае нельзя ссылаться на значения, которые имеют тип XML или определяемый пользователем тип среды CLR.
Примеры
А. Передача переменной Transact-SQL в XML с помощью функции sql:variable()
Следующий пример показывает создание экземпляра XML, в котором содержатся следующие данные:
Значение (
ProductID
) из реляционного столбца. Функция sql:column() используется для привязки этого значения в XML.Значение (
ListPrice
) из реляционного столбца другой таблицы. В этом случае функцияsql:column()
также используется для связывания этого значения с XML.Значение (
DiscountPrice
) из переменной Transact-SQL. С помощью методаsql:variable()
это значение связывается с XML.Значение (
ProductModelName
) из столбца типа XML , чтобы сделать запрос более интересным.
Запрос является таковым:
DECLARE @price money
SET @price=2500.00
SELECT ProductID, Production.ProductModel.ProductModelID,CatalogDescription.query('
declare namespace pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
<Product
ProductID="{ sql:column("Production.Product.ProductID") }"
ProductModelID= "{ sql:column("Production.Product.ProductModelID") }"
ProductModelName="{/pd:ProductDescription[1]/@ProductModelName }"
ListPrice="{ sql:column("Production.Product.ListPrice") }"
DiscountPrice="{ sql:variable("@price") }"
/>')
FROM Production.Product
JOIN Production.ProductModel
ON Production.Product.ProductModelID = Production.ProductModel.ProductModelID
WHERE ProductID=771
Обратите внимание на следующие данные из предыдущего запроса:
XQuery внутри метода
query()
формирует XML.Ключевое
namespace
слово используется для определения префикса пространства имен в прологе XQuery. Это возможно потому, что значение атрибутаProductModelName
получается из столбца типаCatalogDescription xml
, с которым связана схема.
Результат:
<Product ProductID="771" ProductModelID="19"
ProductModelName="Mountain 100"
ListPrice="3399.99" DiscountPrice="2500" />
См. также
Функции расширения SQL Server XQuery
Сравнение типизированного и нетипизированного XML
XML-данные (SQL Server)
Создание экземпляров данных XML
Методы для типа данных XML
Язык обработки XML-данных (XML DML)