Megosztás a következőn keresztül:


XQuery Extension Functions – sql:variable()

A következőkre vonatkozik:SQL Server

Olyan változót tesz elérhetővé, amely egy SQL-relációs értéket tartalmaz egy XQuery-kifejezésben.

Szintaxis

  
sql:variable("variableName") as xdt:anyAtomicType?  

Megjegyzések

A témakörben leírtak szerint Relációs adatok kötése XML-belül, ezt a függvényt akkor használhatja, ha XML-adattípus-metódusokat a relációs érték XQueryn belüli megjelenítéséhez.

A query() metódus például egy xml- adattípus változójában vagy oszlopában tárolt XML-példányra vonatkozó lekérdezés megadására szolgál. Előfordulhat, hogy azt is szeretné, hogy a lekérdezés egy Transact-SQL változó vagy paraméter értékeit használja a relációs és XML-adatok összehozásához. Ehhez az sql:variable függvényt kell használnia.

Az SQL-érték megfeleltethető egy megfelelő XQuery-értékhez, és a típusa egy XQuery alaptípus lesz, amely egyenértékű a megfelelő SQL-típussal.

Csak xml-példányra hivatkozhat egy XML-DML beszúrási utasítás forráskifejezésének kontextusában; ellenkező esetben nem hivatkozhat olyan értékekre, amelyek xml vagy felhasználó által definiált közös nyelvi futtatókörnyezeti (CLR) típusúak.

Példák

Egy. Az sql:variable() függvény használata Transact-SQL változó értékének XML-be való behozásához

Az alábbi példa egy XML-példányt hoz létre, amely az alábbiakból áll:

  • Nem XML-oszlopból származó érték (ProductID). Az sql:column() függvény használatával köti össze ezt az értéket az XML-ben.

  • Egy nem XML-oszlopból származó érték (ListPrice) egy másik táblából. A sql:column() ismét az XML-ben köti össze ezt az értéket.

  • Egy Transact-SQL változóból származó érték (DiscountPrice). A sql:variable() metódust használja az érték XML-hez való kötéséhez.

  • Egy xml- típusú oszlopból származó érték (ProductModelName) a lekérdezés érdekesebbé tétele érdekében.

Ez a lekérdezés:

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  

Jegyezze fel az előző lekérdezésben szereplő következőket:

  • A query() metóduson belüli XQuery az XML-t hozza létre.

  • A namespace kulcsszó a névtér előtagjának meghatározására szolgál az XQuery Prolog. Ez azért történik, mert a ProductModelName attribútum értéke a CatalogDescription xml típusoszlopból lesz lekérve, amelyhez séma van társítva.

Ez az eredmény:

<Product ProductID="771" ProductModelID="19"   
         ProductModelName="Mountain 100"   
         ListPrice="3399.99" DiscountPrice="2500" />  

Lásd még:

SQL Server XQuery Extension Functions
Gépelt XML összehasonlítása a nem beírt XML-
XML-adatok (SQL Server)
XML-adatpéldányok létrehozása
xml-adattípus-metódusok
XML-adatmódosítási nyelv (XML DML)