CONCAT (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsPDW (Analytics Platform System)Ponto de extremidade de SQL no Microsoft FabricWarehouse no Microsoft Fabric

Essa função retorna uma cadeia de caracteres resultante de concatenação ou junção de dois ou mais valores de cadeia de caracteres de ponta a ponta.

Observação

Para adicionar um valor de separação durante a concatenação, consulte CONCAT_WS.

Convenções de sintaxe de Transact-SQL

Sintaxe

CONCAT ( argument1 , argument2 [ , argumentN ] ... )

Observação

Para exibir a sintaxe do Transact-SQL para o SQL Server 2014 (12.x) e versões anteriores, confira a Documentação das versões anteriores.

Argumentos

argument1, argument2 [ , argumentN ]

Uma expressão de qualquer valor de cadeia de caracteres. A função CONCAT exige, pelo menos, dois argumentos e, no máximo, 254 argumentos.

Tipos de retorno

Um valor de cadeia de caracteres cujos comprimento e tipo dependem da entrada.

Comentários

CONCAT usa um número variável de argumentos de cadeia de caracteres e os concatena em uma única cadeia de caracteres. Exige um mínimo de dois valores de entrada; caso contrário, CONCAT gera um erro. CONCAT converte implicitamente todos os argumentos nos tipos de cadeia de caracteres antes da concatenação. CONCAT converte implicitamente os valores nulos em cadeias de caracteres vazias. Se CONCAT receber argumentos com todos os valores NULL, ele retornará uma cadeia de caracteres vazia do tipo varchar(1). A conversão implícita em cadeias de caracteres segue as regras existentes para conversões de tipo de dados. Para obter mais informações sobre conversões de tipo de dados, consulte CAST e CONVERT (Transact-SQL).

O tipo de retorno depende do tipo dos argumentos. Esta tabela ilustra o mapeamento:

Tipo de entrada Tipo e comprimento da saída
1. Qualquer argumento de um tipo de sistema SQL-CLR, um UDT SQL-CLR ou nvarchar(max) nvarchar(max)
2. Caso contrário, qualquer o argumento do tipo varbinary(max) ou varchar(max) varchar(max), a menos que um dos parâmetros seja um nvarchar de qualquer comprimento. Nesse caso, CONCAT retorna um resultado do tipo nvarchar(max).
3. Caso contrário, qualquer argumento do tipo nvarchar de até 4000 caracteres (nvarchar(<= 4000)) nvarchar(<= 4000)
4. Em todos os outros casos qualquer argumento do tipo varchar de até 8000 caracteres (varchar(<= 8000)), a menos que um dos parâmetros seja um nvarchar de qualquer comprimento. Naquele caso, CONCAT retorna um resultado do tipo nvarchar(max).

Quando CONCAT recebe argumentos de entrada nvarchar de comprimento <=4000 caracteres, ou argumentos de entrada varchar de comprimento <=8000 caracteres, conversões implícitas poderão afetar o comprimento das resultado. Outros tipos de dados têm comprimentos diferentes quando são convertidos implicitamente em cadeias de caracteres. Por exemplo, um int com o valor 14 tem um comprimento de string de 2, enquanto um float com o valor 1234.56789 tem um comprimento de string de 7 (1234.57). Portanto, uma concatenação desses dois valores retorna um resultado com um comprimento não inferior a 9 caracteres.

Se nenhum dos argumentos de entrada tiver um tipo LOB (objeto grande) com suporte, o tipo retornado será truncado para 8.000 caracteres, independentemente do tipo retornado. Esse truncamento preserva espaço e dá suporte à eficiência na geração do plano.

CONCAT pode ser executado remotamente em um servidor vinculado que esteja executando o SQL Server 2012 (11.x) e versões posteriores. Para servidores vinculados mais antigos, a operação CONCAT ocorre localmente, depois que o servidor vinculado retornar os valores não concatenados.

Exemplos

R. Usar CONCAT

SELECT CONCAT ('Happy ', 'Birthday ', 11, '/', '25') AS Result;

Este é o conjunto de resultados.

Result
--------------------
Happy Birthday 11/25

B. Usar CONCAT com valores NULL

CREATE TABLE #temp (
    emp_name NVARCHAR(200) NOT NULL,
    emp_middlename NVARCHAR(200) NULL,
    emp_lastname NVARCHAR(200) NOT NULL
    );

INSERT INTO #temp
VALUES ('Name', NULL, 'Lastname');

SELECT CONCAT (emp_name, emp_middlename, emp_lastname) AS Result
FROM #temp;

Este é o conjunto de resultados.

Result
------------
NameLastname