Condividi tramite


Funzione not (XQuery)

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 utilizzo del linguaggio XQuery sulle istanze XML archiviate in diverse colonne di tipo xml nel database AdventureWorks2008R2. Per una panoramica su ognuna di queste colonne, vedere Rappresentazione del tipo di dati XML nel database AdventureWorks2008R2.

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

La query seguente genera codice XML contenente l'ID dei modelli di prodotto le cui descrizioni di 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 possibilità consiste nell'utilizzare la parola chiave declare namespace nel prologo della query XQuery per definire il prefisso.

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

  • La clausola WHERE utilizza il metodo exist() (tipo di dati XML) per filtrare le righe. Il metodo exist() restituisce True se esistono elementi <ProductDescription> privi di elementi figlio <Specification>. Si noti l'utilizzo della funzione not().

In questo caso il set di risultati è vuoto perché tutte le descrizioni di catalogo dei modelli di prodotto includono 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 i record in cui per l'elemento <Location> non è specificato l'attributo MachineHours.

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:

  • La parola chiave declare namespace nel prologo della query XQuery definisce il prefisso dello spazio dei nomi delle istruzioni di produzione di 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 l'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()*, oppure la sequenza vuota.

Vedere anche

Riferimento