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 XQuery-Funktion not() 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 Möglichkeit besteht darin, das Schlüsselwort declare namespace in XQuery Prolog zu verwenden, um das Präfix zu definieren.

  • Die Abfrage erstellt dann den XML-Code, der das -Element und das <Product>zugehörige 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 Not() -Funktion.

Dieses Resultset ist leer, da jede Beschreibung des Produktmodellkatalogs 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 der Adventure Works-Fertigungsanweisungen. Dieser Namespace ist mit dem in dem Fertigungsanweisungsdokument verwendeten identisch.

  • In der Abfrage gibt das Not(@MachineHours) -Prädikat 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 Not() -Funktion unterstützt nur Argumente vom Typ xs:boolean oder node()* oder die leere Sequenz.

Weitere Informationen

XQuery-Funktionen für den xml-Datentyp