Exporter (0) Imprimer
Développer tout
Cet article a fait l'objet d'une traduction manuelle. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
Traduction
Source

Fonction sum (XQuery)

Retourne la somme d'une série de nombres.

fn:sum($arg as xdt:anyAtomicType*) as xdt:anyAtomicType

$arg

Série de valeurs atomiques dont la somme est à calculer.

Tous les types des valeurs atomiques transmises à sum() doivent être des sous-types du même type de base. Les types de base acceptés sont les trois types de base numériques intégrés ou xdt:untypedAtomic. Les valeurs de type xdt:untypedAtomic sont converties en valeurs xs:double. S'il existe un mélange de ces types ou si d'autres valeurs d'autres types sont transmises, une erreur statique est générée.

Le résultat de sum() reçoit le type de base des types transmis, tel que xs:double dans le cas de xdt:untypedAtomic, même si l'entrée correspond éventuellement à une série vide. Si l'entrée est vide statiquement, le résultat est 0 avec le type statique et dynamique de xs:integer.

La fonction sum() retourne la somme des valeurs numériques. Si une conversion d'une valeur xdt:untypedAtomic en xs:double ne peut pas être effectuée, la valeur est ignorée dans la séquence en entrée, $arg. Si l'entrée est une séquence vide calculée dynamiquement, la valeur 0 du type de base utilisé est retournée.

La fonction retourne une erreur d'exécution en cas d'exception de dépassement de capacité ou de valeur hors limite.

Cette rubrique propose des exemples de XQuery relatifs à des instances XML stockées dans différentes colonnes de type xml tirées de la base de données AdventureWorks2012 .

A.Utilisation de la fonction XQuery sum() pour rechercher le nombre total d'heures de travail pour tous les ateliers inclus dans le processus de fabrication

La requête ci-dessous permet de trouver le nombre total d'heures de travail pour tous les ateliers inclus dans le processus de fabrication de tous les modèles de produits pour lesquels des instructions de fabrication sont stockées.

SELECT Instructions.query('       
   declare namespace AWMI="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";       
  <ProductModel PMID= "{ sql:column("Production.ProductModel.ProductModelID") }"       
  ProductModelName = "{ sql:column("Production.ProductModel.Name") }" >       
   <TotalLaborHrs>       
     { sum(//AWMI:Location/@LaborHours) }       
   </TotalLaborHrs>       
 </ProductModel>       
    ') as Result       
FROM Production.ProductModel       
WHERE Instructions is not NULL       

Le résultat partiel est le suivant.

<ProductModel PMID="7" ProductModelName="HL Touring Frame">
   <TotalLaborHrs>12.75</TotalLaborHrs>
</ProductModel>
<ProductModel PMID="10" ProductModelName="LL Touring Frame">
  <TotalLaborHrs>13</TotalLaborHrs>
</ProductModel>
...

Au lieu de retourner le résultat au format XML, vous pouvez écrire la requête pour générer des résultats relationnels, comme l'illustre la requête suivante :

SELECT ProductModelID,       
        Name,       
        Instructions.value('declare namespace 
      AWMI="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";       
    sum(//AWMI:Location/@LaborHours)', 'float') as TotalLaborHours       
FROM Production.ProductModel       
WHERE Instructions is not NULL        

Voici un résultat partiel :

ProductModelID Name                 TotalLaborHours       
-------------- -------------------------------------------------
7              HL Touring Frame           12.75                 
10             LL Touring Frame           13                    
43             Touring Rear Wheel         3                     
...

Limitations d'implémentation

Vous trouverez les limitations ci-dessous :

  • Seule la version à un seul argument de sum() est prise en charge.

  • Si l'entrée est une séquence vide calculée dynamiquement, la valeur 0 du type de base utilisé est retournée à la place du type xs:integer.

  • La fonction sum() mappe tous les entiers à xs:decimal.

  • La fonction sum() n'est pas prise en charge sur des valeurs de type xs:duration.

  • Les séquences faisant intervenir plusieurs types dérivés de différents types de base ne sont pas prises en charge.

  • L'expression sum((xs:double(“INF”), xs:double(“-INF”))) génère une erreur de domaine.

Cela vous a-t-il été utile ?
(1500 caractères restants)
Merci pour vos suggestions.

Ajouts de la communauté

AJOUTER
Afficher:
© 2015 Microsoft