Sdílet prostřednictvím


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. Znovu sql:column() slouží k vytvoření vazby této hodnoty v xml.

  • Hodnota (DiscountPrice) z proměnné Transact-SQL. Metoda sql: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 atributu ProductModelName je načtena ze sloupce typu CatalogDescription 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)