Megosztás:


Számszerűsített kifejezések (XQuery)

A következőkre vonatkozik:SQL Server

Az egzisztenciális és univerzális kvantitátorok különböző szemantikát határoznak meg a logikai operátorok számára, amelyek két sorozatra vannak alkalmazva. Ez az alábbi táblázatban látható.

Egzisztenciális számszerűsítő
Két sorozat esetén, ha az első sorozat bármely eleme megegyezik a második sorozatban a használt összehasonlító operátor alapján, a visszaadott érték Igaz.

univerzális kvantálási
Két sorozat esetén, ha az első sorozat minden eleme megegyezik a második sorozatban, a visszaadott érték Igaz.

Az XQuery a következő formában támogatja a számszerűsített kifejezéseket:

( some | every ) <variable> in <Expression> (,...) satisfies <Expression>  

Ezekkel a kifejezésekkel egy lekérdezésben explicit módon alkalmazhat egzisztenciális vagy univerzális kvantálást egy kifejezésre egy vagy több szekvencián keresztül. Az SQL Serverben a satisfies záradék kifejezésének a következők egyikét kell eredményeznie: csomópontütemezést, üres sorozatot vagy logikai értéket. A kvantálás során a kifejezés eredményének tényleges logikai értékét fogja használni. Az egyes használó egzisztenciális kvantálás igaz értéket ad vissza, ha a kvantáló által kötött értékek közül legalább egy igaz eredményt ad a megfelelő kifejezésben. Az összes használó univerzális kvantálásnak igaznak kell lennie a kvantáló által kötött összes értékre.

Az alábbi lekérdezés például minden <Hely> elemet ellenőrzi, hogy rendelkezik-e LocationID attribútummal.

SELECT Instructions.query('  
     declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";  
        if (every $WC in //AWMI:root/AWMI:Location   
            satisfies $WC/@LocationID)  
        then  
             <Result>All work centers have workcenterLocation ID</Result>  
         else  
             <Result>Not all work centers have workcenterLocation ID</Result>  
') as Result  
FROM Production.ProductModel  
where ProductModelID=7  

Mivel a LocationID a <Hely> elem kötelező attribútuma, a várt eredményt kapja:

<Result>All work centers have Location ID</Result>   

A query() metódushasználata helyett a érték() metódus használatával visszaadhatja az eredményt a relációs világba, ahogyan az az alábbi lekérdezésben is látható. A lekérdezés igaz értéket ad vissza, ha az összes műhelyhely locationID attribútummal rendelkezik. Ellenkező esetben a lekérdezés hamis értéket ad vissza.

SELECT Instructions.value('  
     declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";  
        every $WC in  //AWMI:root/AWMI:Location   
            satisfies $WC/@LocationID',   
  'nvarchar(10)') as Result  
FROM Production.ProductModel  
where ProductModelID=7  

Az alábbi lekérdezés ellenőrzi, hogy az egyik termékkép kicsi-e. A termékkatalógus XML-fájljában különböző szögek vannak tárolva minden különböző méretű termékképhez. Érdemes lehet meggyőződni arról, hogy minden termékkatalógus XML-fájlja tartalmaz legalább egy kis méretű képet. A következő lekérdezés ezt hajtja végre:

SELECT ProductModelID, CatalogDescription.value('  
     declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
     some $F in /PD:ProductDescription/PD:Picture  
        satisfies $F/PD:Size="small"', 'nvarchar(20)') as SmallPicturesStored  
FROM Production.ProductModel  
WHERE ProductModelID = 19  

Ez egy részleges eredmény:

ProductModelID SmallPicturesStored   
-------------- --------------------  
19             true        

Megvalósítási korlátozások

Ezek a korlátozások:

  • A típusérvényesítés nem támogatott a változó kvantált kifejezésekben való kötésének részeként.

Lásd még:

XQuery-kifejezések