Funções em Valores da Cadeia de Caracteres – concat
Aplica-se: 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 reconhecem substitutos" no tópico Alterações significativas nos recursos do Mecanismo de Banco de Dados no SQL Server 2016. Consulte também Nível de compatibilidade ALTER DATABASE (Transact-SQL) e Suporte a ordenação e Unicode.
Exemplos
Este tópico fornece exemplos de XQuery em relação a instâncias XML armazenadas em várias colunas de tipo xml no banco de dados de exemplo AdventureWorks.
R. 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 do 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 do 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 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 apenas valores do tipo xs:string. Outros valores precisam ser explicitamente convertidos em xs:string ou xdt:untypedAtomic.