Seguramente en más de una oportunidad hemos tenido que concatenar variable o campos en SQL Server. Ahora bien, lo que nos sucede es que puede suceder que esos campos no sean del tipo varchar o bien tengan valores nulos lo cual nos puede complicar un poco el código TSQL a utilizar.

Supongamos que tenemos las siguientes variables que necesitamos concatenar

DECLARE @NRO INT = 10
DECLARE @STRING VARCHAR(255) = 'TRIGGERDB CONSULTING'
DECLARE @STRING2 VARCHAR(255) = NULL
DECLARE @FECHA DATE = GETDATE()

Si para concatenar estas variables intentamos ejecutar el siguiente código TSQL nos encontraremos con un error en la conversión de tipo de datos.

SELECT @NRO +'-' + @STRING + '-' + @STRING2 + '-' + @FECHA

Msg 206, Level 16, State 2, Line 8
Operand type clash: date is incompatible with int

Con lo cual si lo queremos hacer de forma correcta deberíamos ejecutar el siguiente código

SELECT CONVERT(VARCHAR(10),@NRO)
		+ '-' +  ISNULL(@STRING,'') 
		+ '-' + ISNULL(@STRING2,'') 
		+ '-' + CONVERT(VARCHAR(12),@FECHA)

Ahora bien, esto nos obliga a hacer conversiones y además tratar los posibles nulos ya que si no lo hacemos todo el resultado nos dará null

Usando CONCAT

La instrucción CONCAT() (la cual esta disponible desde SQL Server 2012 en adelante) nos permite concatenar distintos tipos de valores y llevarlos a un string de forma automática donde ademas si hay nulos no impactaran en el resultado.

Para escribir entonces de forma correcta nuestro código según el caso anterior y usando la instruccion CONCAT debemos hacer algo como esto:

SELECT CONCAT(@NRO,'-',@STRING,'-',@STRING2,'-',@FECHA)

10-TRIGGERDB CONSULTING–2019-03-11
(1 row affected)

Como se puede observar es mucho más limpia y simple de usar