Funciones usadas en valores de cadena: concat

Se aplica a:SQL Server

Acepta cero o más cadenas como argumentos y devuelve una cadena creada mediante la concatenación de los valores de cada uno de estos argumentos.

Sintaxis

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

Argumentos

$string
Cadena opcional que se concatenará.

Comentarios

La función requiere al menos dos argumentos. Si un argumento es una secuencia vacía, se tratará como una cadena de longitud cero.

Caracteres adicionales (pares suplentes)

El comportamiento de pares suplentes en las funciones XQuery depende del nivel de compatibilidad de la base de datos y, en algunos casos, del URI del espacio de nombres predeterminado de las funciones. Para obtener más información, vea la sección "XQuery Functions Are Surrogate-Aware" en el tema Cambios importantes en las características del motor de base de datos en SQL Server 2016. Consulte también El nivel de compatibilidad de ALTER DATABASE (Transact-SQL) y la compatibilidad con Intercalación y Unicode.

Ejemplos

En este tema se proporcionan ejemplos de XQuery en instancias XML almacenadas en varias columnas de tipo xml en la base de datos de ejemplo AdventureWorks.

A. Usar la función de XQuery concat() para concatenar cadenas

Para un modelo de producto determinado, esta consulta devuelve una cadena creada mediante la concatenación del período de garantía y la descripción de la misma. En el documento de descripción del catálogo, el <Warranty> elemento se compone de>WarrantyPeriod< elementos secundarios y .<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  
  

Observe lo siguiente en la consulta anterior:

  • En la cláusula SELECT, CatalogDescription es una columna de tipo xml . Por lo tanto, se usa el método query() (tipo de datos XML), Instructions.query(). La instrucción de XQuery se especifica como el argumento para el método de consulta.

  • El documento en el que se ejecuta la consulta utiliza espacios de nombres. Por lo tanto, la palabra clave del espacio de nombres se usa para definir el prefijo del espacio de nombres. Para obtener más información, consulte XQuery Prolog.

El resultado es el siguiente:

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

La consulta anterior recupera información para un producto determinado. La consulta siguiente recupera la misma información para todos los productos para los que se almacenan descripciones del catálogo XML. El método exist() del tipo de datos xml en la cláusula WHERE devuelve True si el documento XML de las filas tiene un <ProductDescription> elemento .

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  
  

Tenga en cuenta que el valor booleano devuelto por el método exist() del tipo xml se compara con 1.

Limitaciones de la implementación

Éstas son las limitaciones:

  • La función concat() de SQL Server solo acepta valores de tipo xs:string. Los demás valores se deben convertir explícitamente a xs:string o xdt:untypedAtomic.

Consulte también

Funciones de XQuery con el tipo de datos xml