Compartilhar via


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.

Caracteres suplementares (pares substitutos)

O comportamento de pares substitutos em funções XQuery depende do nível de compatibilidade do banco de dados e, em alguns casos, o URI do namespace padrão para funções. Para obter mais informações, consulte a seção "As funções XQuery têm consciência de substitutos” no tópico Alterações em recursos do Mecanismo de Banco de Dados que causam interrupção no SQL Server 2012. Consulte também Nível de compatibilidade de ALTER DATABASE (Transact-SQL) e Suporte a agrupamentos e a Unicode.

Exemplos

Este tópico fornece exemplos de XQuery contra instâncias XML armazenadas em várias colunas do tipo xml no banco de dados de exemplo AdventureWorks.

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 Booliano 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

Funções XQuery em tipos de dados xml