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)