Fonction not (XQuery)

 

S’applique à : SQL Server

Retourne la valeur TRUE si la valeur booléenne effective de $arg a la valeur false et FALSE si la valeur booléenne effective de $arg a la valeur true.

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

$arg
Séquence d'éléments pour lesquels existe une valeur booléenne effective.

Cette rubrique fournit des exemples de XQuery relatifs à des instances XML stockés dans différentes xml colonnes de type dans la base de données AdventureWorks.

A. À l’aide de la fonction XQuery not() pour rechercher les modèles de produit dont les descriptions du catalogue n’incluent pas les < spécifications> élément.

La requête suivante construit le document XML qui contient les ID des modèles de produit dont la description de catalogue ne comprend pas l'élément <Specifications>.

WITH XMLNAMESPACES ('http://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  

Notez les points suivants dans la requête précédente :

  • Étant donné que le document utilise des espaces de noms, l'exemple recourt à l'instruction WITH NAMESPACES. Une autre option consiste à utiliser le déclarer l’espace de noms mot clé dans le prologue XQuery pour définir le préfixe.

  • La requête construit ensuite le document XML qui comprend le <Product> élément et ses ProductModelID attribut.

  • La clause WHERE utilise le méthode exist() (type de données XML) pour filtrer les lignes. Le exist() méthode renvoie la valeur True s’il y a < ProductDescription> les éléments qui n’ont pas < spécification> des éléments enfants. Notez l’utilisation de la not() (fonction).

Ce jeu de résultats est vide, car chaque description de catalogue de modèles de produit inclut le < spécifications> élément.

B. Utilisation de la fonction XQuery not() pour extraire les sites de production dépourvus de l'attribut MachineHours

La requête suivante porte sur la colonne Instructions. Cette colonne stocke les instructions de fabrication des modèles de produit.

Pour un modèle de produit particulier, la requête extrait les sites de production qui ne spécifient pas l'attribut MachineHours. Autrement dit, l’attribut MachineHours n’est pas spécifié pour le < emplacement> élément.

SELECT ProductModelID, Instructions.query('  
declare namespace AWMI="http://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   

Dans la requête précédente, notez les points suivants :

  • Le declarenamespace dans prologue XQuery définit le préfixe d’espace de noms des instructions de fabrication d’Adventure Works. Il représente le même espace de noms que celui utilisé dans le document des instructions de fabrication.

  • Dans la requête, le not(@MachineHours) prédicat retourne True s’il existe aucune MachineHours attribut.

Voici le résultat obtenu :

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

Limites de mise en œuvre

Les limitations suivantes s'appliquent :

  • Le not() fonction prend uniquement en charge les arguments de type xs : Boolean ou node() * ou la séquence vide.

Fonctions XQuery sur le Type de données xml

Ajouts de la communauté

Afficher: