Fonctions sur des valeurs booléennes : fonction not

S'applique à : SQL Server

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

Syntaxe

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

Arguments

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

Exemples

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

R : Utilisation de la fonction not() XQuery pour rechercher des modèles de produit dont les descriptions de catalogue n’incluent pas l’élément <Specifications> .

La requête suivante construit du code XML qui contient des ID de modèle de produit pour les modèles de produit dont les descriptions de catalogue n’incluent pas l’élément <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  

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 mot clé declare namespace dans le prolog XQuery pour définir le préfixe.

  • La requête construit ensuite le code XML qui inclut l’élément <Product> et son attribut ProductModelID .

  • La clause WHERE utilise la méthode exist() (type de données XML) pour filtrer les lignes. La méthode exist() retourne True s’il existe <des éléments ProductDescription> qui n’ont <pas d’éléments enfants Specification> . Notez l’utilisation de la fonction not().

Ce jeu de résultats est vide, car chaque description du catalogue de modèles de produit inclut l’élément <Specifications> .

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 l’élément <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   

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

  • Le declarenamespace dans XQuery Prolog définit le préfixe d’espace de noms des instructions de fabrication 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 prédicat not(@MachineHours) retourne True s’il n’existe aucun attribut MachineHours .

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 :

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

Voir aussi

Fonctions XQuery impliquant le type de données xml