Parametros multi-valor para un Stored Procedure

Resulta que por enésima ocasión tuve la necesidad de pasar un string de caracteres como parámetro de un SP de la forma: “3,4,14,29,53,98” donde cada número separado por la coma lo necesito utilizar dentro de un Query como parte de un IN, p.e. Select * from tabla where identificador IN (3,4,14,29,53,98), pero estos valores los recibo como un string, entonces fue cuando entra la duda de como poder hacer ese query con los valores que vienen en una cadena, es decir, como quitarle las “” y utilizar el valor.

Después de navegar un rato por la red encontré un método sencillo, donde se va recorriendo el valor de la cadena y se va metiendo cada valor encontrado en una tabla temporal y posteriormente utilizas una consulta del tipo: Select * from tabla Where identificador IN (Select campotmp from #tablatmp) y eso es todo.

He aquí el ejemplo:

CREATE PROCEDURE [dbo].[tb_tblUsers]

@ListaItems VARCHAR(4000)

AS

BEGIN

SET NOCOUNT ON

 

CREATE TABLE #TABLETMPUSRS (

Item INT null

)

DECLARE @ListaTemp NVARCHAR(4000)

SET @ListaTemp = @ListaItems

DECLARE @indx INT

DECLARE @Item NVARCHAR(4000)

SET @ListaTemp = REPLACE (@ListaTemp, ' ', '')

SET @indx = CHARINDEX(',', @ListaTemp)

WHILE (LEN(@ListaTemp) > 0)

BEGIN

IF @indx = 0

SET @Item = @ListaTemp

ELSE

SET @Item = LEFT(@ListaTemp, @indx – 1)

SET @Item = CAST(@Item as INT)

INSERT INTO #TABLETMPUSRS(Item) VALUES(@Item)

IF @indx = 0

SET @ListaTemp =''

ELSE

SET @ListaTemp = RIGHT(@ListaTemp, LEN(@ListaTemp) - @indx)

SET @indx = CHARINDEX(',', @ListaTemp)

END

--Aqui viene la consulta que necesitamos

SELECT identificador, nombre, direccion, telefono, mail FROM tblUsers

WHERE identificador IN (

SELECT Item FROM #TABLETMPUSRS

)

 

y listo, con esto convertimos nuestra cadena en una serie de multivalores para nuestro query.

el llamado sería algo así

EXEC [tb_tblUsers] '3,4,14,29,53,98'

y que al final, lo único que buscamos es hacer un query de este modo

SELECT identificador, nombre, direccion, telefono, mail FROM tblUsers

WHERE identificador IN (3,4,14,29,53,98)

Pero en ocasiones las circunstancias al momento de programar no permite mandar un número determinado de parámetros al Stored Procedure.

Espero haya sido de ayuda y me haya explicado correctamente.

saludos


1 comment

Leave a Reply

Your email address will not be published.

Para evitar SPAM realiza la siguiente operación: *