Condividi tramite


Funzioni su valori booleani - not

Si applica a:SQL Server

Restituisce TRUE se il valore booleano effettivo di $arg è false e restituisce FALSE se il valore booleano effettivo di $arg è true.

Sintassi

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

Argomenti

$arg
Una sequenza di elementi per i quali esiste un valore booleano effettivo.

Esempi

In questo argomento vengono forniti esempi di XQuery su istanze XML archiviate in varie colonne di tipo xml nel database AdventureWorks.

R. Utilizzo della funzione XQuery not() per trovare modelli di prodotto le cui descrizioni del catalogo non includono l'elemento <Specifications> .

La query seguente costruisce xml che contiene GLI ID modello di prodotto per i modelli di prodotto le cui descrizioni del catalogo non includono l'elemento <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  

Dalla query precedente si noti quanto segue:

  • Poiché il documento utilizza gli spazi dei nomi, nell'esempio viene utilizzata l'istruzione WITH NAMESPACES. Un'altra opzione consiste nell'usare la parola chiave declare namespace nel prologo XQuery per definire il prefisso.

  • La query crea quindi il codice XML che include l'elemento e il <Product> relativo attributo ProductModelID.

  • La clausola WHERE usa il metodo exist() (tipo di dati XML) per filtrare le righe. Il metodo exist() restituisce True se sono <presenti elementi ProductDescription> che non dispongono <di elementi figlio Specification> . Si noti l'uso della funzione not().

Questo set di risultati è vuoto, perché ogni descrizione del catalogo di modelli di prodotto include l'elemento <Specifications> .

B. Utilizzo della funzione XQuery not() per recuperare i centri di lavorazione privi dell'attributo MachineHours

La query seguente viene specificata sulla colonna Instructions. Nella colonna sono archiviate le istruzioni di produzione dei modelli di prodotto.

Per un particolare modello di prodotto, la query recupera i centri di lavorazione che non specificano MachineHour, Ovvero, l'attributo MachineHours non viene specificato per l'elemento <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   

Dalla query precedente si noti quanto segue:

  • Il declarenamespace in XQuery Prolog definisce il prefisso dello spazio dei nomi delle istruzioni di produzione Adventure Works. Rappresenta lo stesso spazio dei nomi utilizzato nel documento di istruzioni di produzione.

  • Nella query il predicato not(@MachineHours) restituisce True se non è presente alcun attributo MachineHours .

Risultato:

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

Limitazioni di implementazione

Limitazioni:

  • La funzione not() supporta solo argomenti di tipo xs:boolean o node()*o la sequenza vuota.

Vedi anche

Funzioni XQuery per il tipo di dati XML