Freigeben über


Funktionen für boolesche Werte – not Function

Gilt für: SQL Server

Gibt TRUE zurück, wenn der effektive boolesche Wert von $arg "false" ist, und gibt FALSE zurück, wenn der effektive boolesche Wert von $arg true ist.

Syntax

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

Argumente

$arg
Eine Elementsequenz, für die es einen effektiven booleschen Wert gibt.

Beispiele

Dieses Thema enthält XQuery-Beispiele für XML-Instanzen, die in verschiedenen XML-Typspalten in der AdventureWorks-Datenbank gespeichert sind.

A. Verwenden der "not() XQuery"-Funktion zum Suchen nach Produktmodellen, deren Katalogbeschreibungen das Specifications-Element> nicht enthalten<.

Die folgende Abfrage erstellt XML, die Produktmodell-IDs für Produktmodelle enthält, deren Katalogbeschreibungen das <Specifications> Element nicht enthalten.

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  

Beachten Sie hinsichtlich der vorherigen Abfrage Folgendes:

  • Da das Dokument Namespaces verwendet, wird in diesem Beispiel die WITH NAMESPACES-Anweisung verwendet. Eine weitere Option besteht darin, das Declare-Namespace-Schlüsselwort im XQuery Prolog zu verwenden, um das Präfix zu definieren.

  • Die Abfrage erstellt dann den XML-Code, der das <Product> Element und sein ProductModelID-Attribut enthält.

  • Die WHERE-Klausel verwendet die exist()-Methode (XML-Datentyp), um die Zeilen zu filtern. Die exist() -Methode gibt True zurück, wenn ProductDescription-Elemente> vorhanden sind<, die keine untergeordneten Specification-Elemente> aufweisen<. Beachten Sie die Verwendung der Funktion "not() ".

Dieser Resultset ist leer, da jede Produktmodellkatalogbeschreibung das <Specifications-Element> enthält.

B. Abrufen von Arbeitsplatzstandorten ohne MachineHours-Attribut mit der XQuery-Funktion not()

Die folgende Abfrage wird beispielsweise für die Instructions-Spalte angegeben. Diese Spalte speichert Anweisungen zur Fertigung der Produktmodelle.

Die Abfrage ruft Arbeitsplatzstandorte, für die kein MachineHours-Attribut angegeben ist, für ein bestimmtes Produktmodell ab. Das heißt, das Attribut MachineHours wird für das <Location-Element> nicht angegeben.

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   

Beachten Sie in der vorherigen Abfrage Folgendes:

  • Der Declarenamespace in XQuery Prolog definiert das Namespacepräfix "Adventure Works manufacturing instructions". Dieser Namespace ist mit dem in dem Fertigungsanweisungsdokument verwendeten identisch.

  • In der Abfrage gibt das Prädikat "not(@MachineHours)" "True" zurück, wenn kein MachineHours-Attribut vorhanden ist.

Dies ist das Ergebnis:

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

Implementierungseinschränkungen

Die folgenden Einschränkungen sind zu beachten:

  • Die Funktion not() unterstützt nur Argumente vom Typ "xs:boolean" oder "node()*" oder die leere Sequenz.

Weitere Informationen

XQuery Functions against the xml Data Type (XQuery-Funktionen für den xml-Datentyp)