Função concat (XQuery)

Aceita zero ou mais cadeias de caracteres como argumentos e retorna uma cadeia de caracteres criada concatenando os valores de cada um desses argumentos.

Sintaxe

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

Argumentos

  • $string
    Cadeia de caracteres opcional para concatenar.

Comentários

A função requer pelo menos dois argumentos. Se um argumento for uma sequência vazia, será tratado como a cadeia de caracteres de comprimento zero.

Exemplos

Este tópico fornece exemplos de XQuery em instâncias XML armazenadas em várias colunas do tipo xml no banco de dados de exemplo AdventureWorks2008R2. Para obter uma visão geral de cada uma dessas colunas, consulte Representação de tipo de dados xml no banco de dados do AdventureWorks2008R2.

A. Uso da função concat() XQuery para concatenar cadeias de caracteres

Para um modelo de produto específico, essa consulta retorna uma cadeia de caracteres criada concatenando o período de garantia e a descrição de garantia. No documento de descrição do catálogo, o elemento <Warranty> é composto pelos elementos filho <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;

Observe o seguinte na consulta anterior:

  • Na cláusula SELECT, CatalogDescription é uma coluna do tipo xml. Portanto, é utilizado o método query() (tipo de dados XML), Instructions.query (). A instrução XQuery é especificada como o argumento para o método de consulta.

  • O documento contra o qual a consulta é executada usa namespaces. Assim, a palavra-chave namespace é usada para definir o prefixo para o namespace. Para obter mais informações, consulte Prólogo XQuery.

Este é o resultado:

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

A consulta anterior recupera informações de um produto específico. A consulta a seguir recupera as mesmas informações de todos os produtos para os quais são armazenadas descrições do catálogo XML. O método exist() do tipo de dados xml na cláusula WHERE retornará True se o documento XML nas linhas tiver um 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

Observe que o valor Booleano retornado pelo método exist() do tipo xml é comparado com 1.

Limitações de implementação

Estas são as limitações:

  • A função concat() no SQL Server aceita somente valores do tipo xs:string. Outros valores precisam ser explicitamente convertidos em xs:string ou xdt:untypedAtomic.

Consulte também

Referência