Hero

Concatenar una columna sin utilizar cursores de SQL Server (T-SQL)

Marzo 11, 2013

kenneth
Microsoft
SQL-Server

En el lenguaje de consulta estructurado (SQL) es el lenguaje de acceso a bases de datos relacionales, en algunas ocaciones nos enfrentamos a ciertos requerimientos los cuales nos presentan cierto grado de dificultad para superarlo, uno de estos puede ser el siguiente caso:

Obtener todos los correos electronicos de los usuarios del sistema separados por coma ’,‘.

En este ejemplo crearemos una tabla llamada “Usuarios”, en la base de datos relacional, y definiremos la siguiente estructura:

<pre title="Creacion tabla Usuarios">CREATE TABLE Usuarios(
Id INT PRIMARY KEY IDENTITY(1,1),
Correo VARCHAR(200) UNIQUE
)

Ahora bien, para solucionar requerimiento podemos pensar en utilizar un Cursor T-SQL sin embargo en este caso veremos una manera que no usa tantos recursos y obtendremos el mismo r esultado.

Declaramos una variable de tipo VARCHAR(MAX) y la inicializamos en blanco, esta variable es donde almacenaremos todos los resultados de la consulta,

<pre title="Declarando Variable @result">DECLARE @result VARCHAR(MAX) = ''

Luego crearemos nuestra consulta SQL sobre la tabla Usuario asignadole el valor a la variable @result contatenando cada resultado de todas las filas, de la siguiente manera:

<pre title="Consultando Usuarios">SELECT @result = @result +',' + u.Correo
FROM Usuarios u

Antes de terminar debemos ajustar el resultado de la consulta utilizando la funcion ’SUBSTRING’ y luego podemos utilizar nuestra variable con la informacion adecuada, por ejemplo imprimirla en consola utilizando la funcion PRINT, el codigo SQL se veria como el siguiente,

<pre title="Ajustar resultado">SET @result = SUBSTRING(@result,2,LEN(@result))
PRINT @result

Espero que les sea de mucha ayuda,

Saludos,

Recibe consejos y oportunidades de trabajo 100% remotas y en dólares de weKnow Inc.