concat (función de XQuery)
Este artículo se tradujo de forma manual. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

concat (función de XQuery)

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.

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

$string

Cadena opcional que se concatenará.

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 "Las funciones de XQuery detectan los caracteres suplentes" en el tema Cambios recientes en las características del Motor de base de datos de SQL Server 2014. Consulte también Nivel de compatibilidad de ALTER DATABASE (Transact-SQL) y Compatibilidad con la intercalación y Unicode.

En este tema se ofrecen ejemplos de consultas XQuery con 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 elemento <Warranty> está formado por los elementos secundarios <WarrantyPeriod> y <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

Observe lo siguiente en la consulta anterior:

  • En la cláusula SELECT, CatalogDescription es una columna de tipo xml. Por tanto, se utiliza query() (método de 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 tanto, la palabra clave namespace se utiliza para definir el prefijo para el espacio de nombres. Para obtener más información, vea Prólogo de las consultas XQuery.

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 de la cláusula WHERE devuelve True si el documento XML de las filas tiene un elemento <ProductDescription>.

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

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() en SQL Server solo acepta los valores del tipo xs:string. Los demás valores se deben convertir explícitamente a xs:string o xdt:untypedAtomic.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2016 Microsoft