Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Область применения: 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)