Anmerkung
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.
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)