Fonctions sur les valeurs de chaîne : oncat

S’applique à :SQL Server

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.

Syntaxe

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

Arguments

$string
Chaîne facultative à concaténer.

Remarques

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 sont compatibles avec les substituts » dans la rubrique Modifications cassants apportées aux fonctionnalités du moteur de base de données dans SQL Server 2016. Consultez également ALTER DATABASE Compatibility Level (Transact-SQL) et Classement et Prise en charge Unicode.

Exemples

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

R. 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 description du catalogue, l’élément est composé d’élémentsWarrantyPeriod<> enfants et.Description<><Warranty>

WITH XMLNAMESPACES (  
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd,  
'https://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 dans la requête précédente :

  • 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é d’espace de noms est utilisé pour définir le préfixe de l’espace de noms. Pour plus d’informations, consultez XQuery Prolog.

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. La méthode exist() du type de données xml dans la clause WHERE retourne true si le document XML dans les lignes a un <ProductDescription> élément.

WITH XMLNAMESPACES (  
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd,  
'https://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 xml est comparée à 1.

Limites de mise en œuvre

Les limitations suivantes s'appliquent :

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

Voir aussi

Fonctions XQuery impliquant le type de données xml