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


Logikai értékek függvényei – nem függvény

A következőkre vonatkozik:SQL Server

IGAZ értéket ad vissza, ha a $arg érvényes logikai értéke hamis, és hamis értéket ad vissza, ha az $arg érvényes logikai értéke igaz.

Szintaxis

  
fn:not($arg as item()*) as xs:boolean  

Érvek

$arg
Olyan elemek sorozata, amelyeknek érvényes logikai értéke van.

Példák

Ez a témakör XQuery-példákat tartalmaz az AdventureWorks-adatbázis különböző xml- típusú oszlopaiban tárolt XML-példányokra.

Egy. A not() XQuery függvény használatával megkereshet olyan termékmodelleket, amelyek katalógusleírásai nem tartalmazzák a <Specifikációk> elemet.

Az alábbi lekérdezés olyan XML-fájlokat hoz létre, amelyek termékmodell-azonosítókat tartalmaznak olyan termékmodellekhez, amelyek katalógusleírásai nem tartalmazzák a <Specifications> elemet.

WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd)  
SELECT ProductModelID, CatalogDescription.query('  
       <Product   
           ProductModelID="{ sql:column("ProductModelID") }"  
        />  
') as Result  
FROM Production.ProductModel  
WHERE CatalogDescription.exist('  
     /pd:ProductDescription[not(pd:Specifications/*)]  '  
     ) = 0  

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

  • Mivel a dokumentum névtereket használ, a minta a WITH NAMESPACES utasítást használja. Egy másik lehetőség a névtér deklarálása kulcsszó használata az XQuery Prolog az előtag meghatározásához.

  • A lekérdezés ezután összeállítja a <Product> elemet és annak ProductModelID attribútumát tartalmazó XML-fájlt.

  • A WHERE záradék a exist() metódust (XML-adattípus) használja a sorok szűréséhez. A létezik() metódus igaz értéket ad vissza, ha vannak <ProductDescription> elemek, amelyek nem rendelkeznek <Specifikáció> gyermekelemekkel. Figyelje meg a nem() függvény használatát.

Ez az eredménykészlet üres, mert minden termékmodell-katalógus leírása tartalmazza a <Specifikációk> elemet.

B. A not() XQuery függvény használata a MachineHours attribútummal nem rendelkező műhelyhelyek lekéréséhez

A következő lekérdezés az Utasítások oszlopban van megadva. Ez az oszlop a termékmodellekhez tartozó gyártási utasításokat tárolja.

Egy adott termékmodell esetében a lekérdezés olyan műhelyhelyeket kér le, amelyek nem adják meg a MachineHourst. Vagyis a MachineHours attribútum nincs megadva a <Hely> elemhez.

SELECT ProductModelID, Instructions.query('  
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions" ;  
     for $i in /AWMI:root/AWMI:Location[not(@MachineHours)]  
     return  
       <Location LocationID="{ $i/@LocationID }"   
                   LaborHrs="{ $i/@LaborHours }" >  
        </Location>  
') as Result  
FROM Production.ProductModel  
WHERE ProductModelID=7   

Az előző lekérdezésben jegyezze fel a következőket:

  • Az XQuery Prolog deklarnamespace határozza meg az Adventure Works gyártási utasítások névtérelőtagjait. A gyártási utasítások dokumentumában használt névteret jelöli.

  • A lekérdezésben a nem(@MachineHours) predikátum igaz értéket ad vissza, ha nincs MachineHours attribútum.

Ez az eredmény:

ProductModelID Result   
-------------- --------------------------------------------  
7              <Location LocationID="30" LaborHrs="1"/>  
               <Location LocationID="50" LaborHrs="3"/>  
               <Location LocationID="60" LaborHrs="4"/>  

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

Ezek a korlátozások:

  • A not() függvény csak az xs:logikai vagy csomópont()* típusú argumentumokat, illetve az üres sorozatot támogatja.

Lásd még:

XQuery-függvények xml adattípusú