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 est 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 par rapport aux instances XML stockées dans différentes colonnes de type XML dans la base de données AdventureWorks.
R. Utilisation de la fonction XQuery not() 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 produits 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 XQuery Prolog 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 produits 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 ce qui suit :
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.