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 concat (XQuery)

Accepte zéro ou plusieurs chaînes comme arguments et renvoie une chaîne créée suite à la concaténation des valeurs de chacun de ces arguments.

fn:concat ($string as xs:string?
           ,$string as xs:string?
           [, ...]) as xs:string

$string

Chaîne facultative à concaténer.

La fonction requiert au moins deux arguments. Si un argument est une séquence vide, elle est traitée comme une chaîne de longueur zéro.

Caractères supplémentaires (paires de substitution)

Le comportement de la paire de substitution dans des fonctions XQuery dépend du niveau de compatibilité de la base de données et, dans certains cas, de l'URI de l'espace de noms par défaut des fonctions. Pour plus d'informations, consultez la section « Les fonctions XQuery prennent en charge la substitution » dans la rubrique Changements essentiels dans les fonctionnalités du moteur de base de données de SQL Server 2012. Consultez également Niveau de compatibilité ALTER DATABASE (Transact-SQL) et Prise en charge d'Unicode et du classement.

Cette rubrique fournit des exemples de requêtes XQuery exécutées sur des instances XML stockées dans diverses colonnes de type xml de l'exemple de la base de données AdventureWorks.

A.Utilisation de la fonction XQuery concat() pour concaténer des chaînes

Pour un modèle de produit spécifique, cette requête renvoie une chaîne obtenue d'après la concaténation de la période et de la description de la garantie. Dans le document de la description du catalogue, l'élément <Warranty> est constitué des éléments enfants <WarrantyPeriod> et <Description>.

WITH XMLNAMESPACES (
'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd,
'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)
SELECT CatalogDescription.query('
    <Product 
        ProductModelID= "{ (/pd:ProductDescription/@ProductModelID)[1] }"
        ProductModelName = "{ sql:column("PD.Name") }" >
        { 
          concat( string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:WarrantyPeriod)[1]), "-",
                  string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:Description)[1])) 
         } 
     </Product>
 ') as Result
FROM Production.ProductModel PD
WHERE  PD.ProductModelID=28

Notez les points suivants par rapport à la requête ci-dessus :

  • Dans la clause SELECT, CatalogDescription est une colonne de type xml. Par conséquent, la méthode query() (type de données XML), Instructions.query(), est utilisée. L'instruction XQuery est spécifiée comme argument de la méthode query.

  • Le document sur lequel porte la requête utilise des espaces de noms. Par conséquent, le mot clé namespace est utilisé pour définir le préfixe d'espace de noms. Pour plus d'informations, consultez Prologue XQuery.

Voici le résultat obtenu :

<Product ProductModelID="28" ProductModelName="Road-450">1 year-parts and labor</Product>

La requête précédente récupère les informations se rapportant à un produit spécifique. La requête suivante récupère les mêmes informations mais pour tous les produits pour lesquels il existe des descriptions de catalogue XML. Dans la clause WHERE, la méthode exist() du type de données xml renvoie la valeur True si le document XML comporte un élément <ProductDescription> dans ses lignes.

WITH XMLNAMESPACES (
'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd,
'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)

SELECT CatalogDescription.query('
    <Product 
        ProductModelID= "{ (/pd:ProductDescription/@ProductModelID)[1] }" 
        ProductName = "{ sql:column("PD.Name") }" >
        { 
          concat( string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:WarrantyPeriod)[1]), "-",
                  string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:Description)[1])) 
         } 
     </Product>
 ') as Result
FROM Production.ProductModel PD
WHERE CatalogDescription.exist('//pd:ProductDescription ') = 1

Notez que la valeur booléenne retournée par la méthode exist() du type de données xml est comparée à 1.

Limites de la mise en œuvre

Les limites sont les suivantes :

  • La fonction concat() dans SQL Server n'accepte que des valeurs de type xs:string. Les autres valeurs doivent être explicitement converties en xs:string ou en xdt:untypedAtomic.

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

Ajouts de la communauté

AJOUTER
Afficher:
© 2014 Microsoft