Funktioner på booleska värden – inte funktion

Gäller för:SQL Server

Returnerar SANT om det effektiva booleska värdet av $arg är falskt, och returnerar FALSE om det effektiva booleska värdet av $arg är sant.

Syntax

  
fn:not($arg as item()*) as xs:boolean  

Arguments

$arg
En sekvens av objekt för vilka det finns ett effektivt boolesk värde.

Examples

Det här avsnittet innehåller XQuery-exempel mot XML-instanser som lagras i olika XML- typkolumner i AdventureWorks-databasen.

A. Använd funktionen not() XQuery för att hitta produktmodeller vars katalogbeskrivningar inte inkluderar <Specifikationer-elementet> .

Följande fråga konstruerar XML som innehåller produktmodell-ID för produktmodeller vars katalogbeskrivningar inte inkluderar elementet <Specifications> .

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  

Observera följande från föregående fråga:

  • Eftersom dokumentet använder namnrymder använder exemplet satsen WITH NAMESPACES. Ett annat alternativ är att använda deklarationsnyckelordet namnrymder i XQuery Prolog för att definiera prefixet.

  • Frågan konstruerar sedan XML:en som inkluderar elementet <Product> och dess ProductModelID-attribut .

  • WHERE-klausulen använder exist()-metoden (XML-datatyp) för att filtrera raderna. Exist()-metoden returnerar True om det finns <ProductDescription-element> som inte har <Specifikationsbarn-element>. Observera användningen av funktionen not().

Denna resultatmängd är tom, eftersom varje produktmodellkatalogbeskrivning innehåller elementet <Specifikationer> .

B. Att använda funktionen not() XQuery för att hämta arbetsplatsplatser som inte har ett attribut MachineHours

Följande fråga anges i kolumnen Instruktioner. Denna kolumn lagrar tillverkningsinstruktioner för produktmodellerna.

För en viss produktmodell hämtar sökningen arbetsplatsplatser som inte specificerar MachineHours. Det vill säga, attributet MachineHours är inte specificerat för elementet <Location> .

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   

I föregående fråga, notera följande:

  • Declarenamespace i XQuery Prolog definierar Adventure Works tillverkningsinstruktioners namnrymdsprefix. Den representerar samma namnrymd som används i tillverkningsinstruktionsdokumentet.

  • I frågan returnerar predikatet not(@MachineHours) True om det inte finns något attribut MachineHours .

Det här är resultatet:

ProductModelID Result   
-------------- --------------------------------------------  
7              <Location LocationID="30" LaborHrs="1"/>  
               <Location LocationID="50" LaborHrs="3"/>  
               <Location LocationID="60" LaborHrs="4"/>  

Implementeringsbegränsningar

Det här är begränsningarna:

  • Not () -funktionen stöder endast argument av typen xs:boolean, eller node()*, eller den tomma sekvensen.