Compartilhar via


Funções em Valores da Cadeia de Caracteres – concat

Aplica-se a:SQL Server

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 reconhecimento alternativo" no tópico Alterações interruptivas nos recursos do mecanismo de banco de dados no SQL Server 2016. Consulte também Alter DATABASE Compatibility Level (Transact-SQL) e Collation e Unicode Support.

Exemplos

Este tópico fornece exemplos XQuery em instâncias XML armazenadas em várias colunas de 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 <Warranty> elemento é composto por>WarrantyPeriod< elementos filho 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 de tipo xml . Portanto, o método query() (tipo de dados XML), Instructions.query(), é usado. A instrução XQuery é especificada como o argumento para o método de consulta.

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

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

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() em SQL Server aceita apenas valores do tipo xs:string. Outros valores precisam ser explicitamente convertidos em xs:string ou xdt:untypedAtomic.

Consulte Também

Funções XQuery em tipos de dados xml