Funzione concat (XQuery)

Accetta zero o più stringhe come argomenti e restituisce una stringa creata concatenando i valori di ognuno di questi argomenti.

Sintassi

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

Argomenti

  • $string
    Stringa facoltativa per la concatenazione.

Osservazioni

La funzione richiede almeno due argomenti. Se un argomento è costituito da una sequenza vuota, viene considerato come stringa di lunghezza zero.

Esempi

In questo argomento vengono forniti esempi di utilizzo del linguaggio XQuery sulle istanze XML archiviate in diverse colonne di tipo xml nel database di esempio AdventureWorks2008R2. Per una panoramica di tali colonne, vedere Rappresentazione del tipo di dati XML nel database AdventureWorks2008R2.

A. Utilizzo della funzione XQuery concat() per la concatenazione di stringhe

Per un modello di prodotto specifico, questa query restituisce una stringa creata concatenando il periodo di validità e la descrizione della garanzia. Nel documento della descrizione di catalogo, l'elemento <Warranty> è costituito dagli elementi figlio <WarrantyPeriod> e <Description>.

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;

Dalla query precedente si noti quanto segue:

  • Nella clausola SELECT, CatalogDescription è una colonna di tipo xml. Pertanto, viene utilizzato il metodo query() con tipo di dati XML, ovvero Instructions.query(). L'istruzione XQuery viene specificata come argomento per il metodo di query.

  • Nel documento sul quale viene eseguita la query vengono utilizzati spazi dei nomi. Pertanto, per definire il prefisso dello spazio dei nomi viene utilizzata la parola chiave namespace. Per ulteriori informazioni, vedere Prologo di una query XQuery.

Risultato:

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

La query precedente recupera le informazioni relative a un prodotto specifico. La query seguente recupera le stesse informazioni per tutti i prodotti per i quali vengono archiviate descrizioni di catalogo XML. Il metodo exist() con tipo di dati xml nella clausola WHERE restituisce il valore True se il documento XML nelle righe include un elemento <ProductDescription>.

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

Si noti che il valore booleano restituito dal metodo exist() con tipo di dati xml viene confrontato con il valore 1.

Limitazioni di implementazione

Limitazioni:

  • La funzione concat() di SQL Server accetta solo valori di tipo xs:string. Per gli altri valori è necessario eseguire il cast esplicito al tipo xs:string o al tipo xdt:untypedAtomic.

Vedere anche

Riferimento