Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gibt TRUE zurück, wenn der effektive boolesche Wert von $arg FALSE ist; 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 stellt XQuery-Beispiele für XML-Instanzen bereit, die in verschiedenen Spalten vom Typ xml in der AdventureWorks-Datenbank gespeichert werden. Eine Übersicht über diese Spalten finden Sie unter Darstellung des xml-Datentyps in der AdventureWorks-Datenbank.
A. Verwenden der not()-XQuery-Funktion zum Suchen von Produktmodellen, deren Katalogbeschreibungen kein <Specifications>-Element enthalten.
Die folgende Abfrage konstruiert XML-Daten, die die Produktmodell-IDs für Produktmodelle enthalten, deren Katalogbeschreibungen kein <Specifications>-Element 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 folgende Punkte in der vorherigen Abfrage:
- Da das Dokument Namespaces verwendet, wird in diesem Beispiel die WITH NAMESPACES-Anweisung verwendet. Eine Alternative dazu wäre die Verwendung des declare namespace-Schlüsselwortes im XQuery-Prolog, um das Präfix zu definieren.
- Anschließend konstruiert die Abfrage die XML-Daten, die das <
Product>-Element und dessen ProductModelID-Attribut enthalten. - 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 besitzen. Beachten Sie die Verwendung der not()-Funktion.
Dieses Resultset ist leer, da die Katalogbeschreibungen aller Produktmodelle ein <Specifications>-Element enthalten.
B. Verwenden der not()-XQuery-Funktion zum Abrufen der Arbeitsplatzstandorte, die kein MachineHours-Attribut besitzen
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. Dies bedeutet, dass kein MachineHours-Attribut für das <Location>-Element angegeben ist.
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 vorhergehenden Abfrage Folgendes:
- Der declare-Namespace im XQuery-Prolog definiert das Namespacepräfix der Fertigungsanweisungen in Adventure Works. Dieser Namespace ist mit dem in dem Fertigungsanweisungsdokument verwendeten identisch.
- In der Abfrage gibt das not(@MachineHours)-Prädikat True zurück, wenn das MachineHours-Attribut nicht 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, node()* oder eine leere Sequenz.
Siehe auch
Verweis
XQuery-Funktionen für den xml-Datentyp