Funkce rozšíření XQuery – sql:variable()
platí pro:SQL Server
Zveřejňuje proměnnou, která obsahuje relační hodnotu SQL uvnitř výrazu XQuery.
Syntax
sql:variable("variableName") as xdt:anyAtomicType?
Poznámky
Jak je popsáno v tématu Vazby relačních dat uvnitř XML, můžete tuto funkci použít při použití metody datového typu XML k zveřejnění relační hodnoty uvnitř XQuery.
Například metoda query() slouží k zadání dotazu na instanci XML uloženou v xml proměnné nebo sloupce datového typu. Někdy můžete chtít, aby dotaz používal hodnoty z proměnné Transact-SQL nebo parametru k propojení relačních dat a dat XML. K tomu použijete funkci sql:variable.
Hodnota SQL se namapuje na odpovídající hodnotu XQuery a jeho typ bude základní typ XQuery, který odpovídá odpovídajícímu typu SQL.
Odkazovat můžete pouze na instanci XML v kontextu zdrojového výrazu příkazu XML-DML insert; V opačném případě nelze odkazovat na hodnoty typu xml nebo clr (Common Language Runtime) uživatelem definovaný typ.
Příklady
A. Použití funkce sql:variable() k přenesení hodnoty proměnné Transact-SQL do XML
Následující příklad vytvoří instanci XML, která se skládá z následujících:
Hodnota (
ProductID
) ze sloupce, který není XML. Funkce sql:column() slouží k vytvoření vazby této hodnoty v xml.Hodnota (
ListPrice
) ze sloupce mimo XML z jiné tabulky. Znovusql:column()
slouží k vytvoření vazby této hodnoty v xml.Hodnota (
DiscountPrice
) z proměnné Transact-SQL. Metodasql:variable()
slouží k vytvoření vazby této hodnoty do XML.Hodnota (
ProductModelName
) ze sloupce typu xml, aby byl dotaz zajímavější.
Toto je dotaz:
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
Všimněte si následujících věcí z předchozího dotazu:
XQuery uvnitř
query()
metoda vytvoří XML.Klíčové slovo
namespace
slouží k definování předpony oboru názvů v XQuery Prolog. To se provádí, protože hodnota atributuProductModelName
je načtena ze sloupce typuCatalogDescription xml
, který má přidružené schéma.
Toto je výsledek:
<Product ProductID="771" ProductModelID="19"
ProductModelName="Mountain 100"
ListPrice="3399.99" DiscountPrice="2500" />
Viz také
funkce rozšíření XQuery SQL Serveru
porovnání typovaného XML s nezatypovanými XML
dat XML (SQL Server)
vytváření instancí datových XML
metody datového typu XML
XML Data Modification Language (XML DML)