Pasando un array a un storeprocedure (SQLServer)

Veremos una jugadita para pasarle un array a un storeprocedure.

Rodríguez Patiño, Eduardo
2,895 lecturas
Rodríguez Patiño, Eduardo
Hemos migrado hace poco nuestras publicaciones del blog antiguo. Si crees que esta se encuentra incompleta o sin coherencia deja un comentario para restaurarla manualmente.

Ahora queremos usar un WHERE IN en nuestro storeprocedure y para eso debemos pasarle las posibles condiciones la cual supongamos podría ser A,B,C.

El problema esta que en SQLServer no podemos pasar un array, entonces la solución es pasar una cadena separado por comas.

Ejem: 'A,B,C'

Y creamos la siguiente función, la cual yo no la hice la baje hace tiempo de una página que ni recuerdo:

CREATE FUNCTION [dbo].[FN_SPLIT_STRING] 
( 
    @string NVARCHAR(MAX), 
    @delimiter CHAR(1) 
) 
RETURNS @output TABLE(splitdata NVARCHAR(MAX) 
) 
BEGIN 
    DECLARE @start INT, @end INT 
    SELECT @start = 1, @end = CHARINDEX(@delimiter, @string) 
    WHILE @start < LEN(@string) + 1 BEGIN 
        IF @end = 0  
            SET @end = LEN(@string) + 1

        INSERT INTO @output (splitdata)  
        VALUES(SUBSTRING(@string, @start, @end - @start)) 
        SET @start = @end + 1 
        SET @end = CHARINDEX(@delimiter, @string, @start)

    END 
    RETURN 
END

Esta función recibe 2 parametros, primero la cadena a partir y luego delimitador la cual nos devolvera una tabla temporal.

Teniendo esto que hacemos ahora, pues creamos nuestro storeprocedure y le pasamos el parametro a filtrar como una cadena separado por comas.

Supongamos que queremos traer a los usuarios que pertenescan al grupo A, B, C.

CREATE PROCEDURE USP_USUARIOS_POR_GRUPOS
    @GRUPO NVARCHAR(MAX)
AS
BEGIN
    -- TABLA TEMPORALES
    DECLARE @TABLA_GRUPOS TABLE(
        id NVARCHAR(MAX)
    ); INSERT INTO @TABLA_GRUPOS SELECT * FROM dbo.FN_SPLIT_STRING(@GRUPO, ',');

    SELECT * FROM Empleados WHERE Grupo IN (SELECT * FROM @TABLA_GRUPOS)
END

Genial, ¿y ahora que hace falta?. Pues llamar al procedure de la siguiente manera:

USP_USUARIOS_POR_GRUPOS 'A,B,C'

Cualquier duda, queja, insulto o lo que sea deja tu comentario y te respondere a tu querida bandeja.

¿Te gustó nuestra publicación?
Suscríbete a nuestro boletín