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
Excelente Amigo, no encontraba la solucion.