Delen via


Functies op Booleaanse waarden - niet functie

van toepassing op:SQL Server-

Retourneert TRUE als de effectieve Booleaanse waarde van $arg onwaar is en retourneert ONWAAR als de effectieve Booleaanse waarde van $arg waar is.

Syntaxis

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

Argumenten

$arg
Een reeks items waarvoor een effectieve Booleaanse waarde is.

Voorbeelden

Dit onderwerp bevat XQuery-voorbeelden voor XML-exemplaren die zijn opgeslagen in verschillende xml--typekolommen in de AdventureWorks-database.

Een. Gebruik de functie not() XQuery om productmodellen te vinden waarvan de catalogusbeschrijvingen niet de <Specifications> element bevatten.

Met de volgende query wordt XML gemaakt die productmodel-id's bevat voor productmodellen waarvan de catalogusbeschrijvingen niet het <Specifications> element bevatten.

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  

Let op het volgende uit de vorige query:

  • Omdat het document naamruimten gebruikt, wordt in het voorbeeld de instructie WITH NAMESPACES gebruikt. Een andere optie is om de naamruimte te declareren trefwoord in de XQuery Prolog- om het voorvoegsel te definiĆ«ren.

  • De query maakt vervolgens de XML die het <Product>-element en het bijbehorende Kenmerk ProductModelID bevat.

  • De WHERE-component maakt gebruik van de methode exist() (XML-gegevenstype) om de rijen te filteren. De exist() methode retourneert True als er <ProductDescription> elementen zijn die geen <Specificatie> onderliggende elementen hebben. Let op het gebruik van de functie not().

Deze resultatenset is leeg, omdat elke beschrijving van de productmodelcatalogus de <Specificaties> element bevat.

B. De functie not() XQuery gebruiken om werkcentrumlocaties op te halen die geen MachineHours-kenmerk hebben

De volgende query wordt opgegeven in de kolom Instructies. In deze kolom worden productie-instructies voor de productmodellen opgeslagen.

Voor een bepaald productmodel haalt de query werkcentrumlocaties op die geen MachineHours opgeven. Dat wil gezegd: het kenmerk MachineHours is niet opgegeven voor het element <Location>.

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   

Let op het volgende in de voorgaande query:

  • De declarenaamruimte in XQuery Prolog- definieert het voorvoegsel van de naamruimte voor de productie-instructies van Adventure Works. Het vertegenwoordigt dezelfde naamruimte die wordt gebruikt in het document met productie-instructies.

  • In de query retourneert de niet(@MachineHours) predicaat True als er geen MachineHours kenmerk is.

Dit is het resultaat:

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

Implementatiebeperkingen

Dit zijn de beperkingen:

  • De functie not() ondersteunt alleen argumenten van het type xs:boolean of node()*, of de lege reeks.

Zie ook

XQuery-functies op basis van het xml-gegevenstype