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.