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.