Bueno primero agradesco sus respuestas...pero les cuento ke enkontre algo ke me pudo dar la luz a mi problema....les cuento el problema de nuevo y komo lo solucione (mejor dicho komo me ayudaron a solucionarlo)....aki les va...
tengo un checkboxlist donde un usuario selecciona los items ke kiere ke filtre la columna...podriamos decir ke es algo asi:
Productos
| <aki iria un checkbox> |
Producto A |
| <aki iria un checkbox> |
Producto B |
| <aki iria un checkbox> |
Producto C |
| <aki iria un checkbox> |
Producto N |
Luego de seleccionar los items para el reporte..entonces estos ids se mandan al servidor y se konstruye el t-sql para selecconar los items ke tengan esos valores...
vb net:
dim parametro as string=string.empty
for i as integer to chklist.items.count -1
if chklist.items(i).selected then
parametro+="''" + chklist.item(i).text + "'',"
end if
next i
if parametro.lenght>0 then
parametro=parametro.substring(0,parametro.lenght-1)
end if
tons ya tengo los items seleccionados.....
por ejemplo si seleccionaba los 2 primeros tendria algo asi:
parametro="''Producto A'',''Producto B''"
luego mi store seria:
@nombres nvarchar(4000)
exec 'select * from productos where nombre in (' + @nombres + ')'
bueno esto funciona muy bien pero me parecia un poko inmanejable...lo ke keria era pasar el parametro kon mas naturalidad sin hacer tanto codigo....
komo ke el parametro kedara asi:
parametro="Producto A, Producto B"
y listo....asi ke aki esta la solucion....primero la funcion ke les mostrare luego krea la tabla temporal kon los items del string (algo asi komo el split del net)...y devuelve un objeto tabla kon estas palabras komo si fueran una fila de una tabla....
tons haria esto en mi sp:
declare @nombres nvarchar(4000)
select * from productos where nombres in (select name from iter_charlist_to_table(@nombres ,','))....
y listo...bueno diskulpen lo extenso y kizas aburrido...pero el ke kiera puede intentarlo...salu2..mas abajo la funcion...aki la pagina http://www.sommarskog.se/arrays-in-sql.html
CREATE FUNCTION iter_charlist_to_table (@list ntext, @delimiter nchar(1) = N',') RETURNS @tbl TABLE (listpos int IDENTITY(1, 1) NOT NULL, ≈nbsp; str varchar(4000), nstr nvarchar(2000)) AS
BEGIN DECLARE @pos int, @textpos int, @chunklen smallint, @tmpstr nvarchar(4000), @leftover nvarchar(4000), @tmpval nvarchar(4000)
SET @textpos = 1 SET @leftover = '' WHILE @textpos <= datalength(@list) / 2 BEGIN SET @chunklen = 4000 - datalength(@leftover) / 2 SET @tmpstr = @leftover + substring(@list, @textpos, @chunklen) SET @textpos = @textpos + @chunklen
SET @pos = charindex(@delimiter, @tmpstr)
WHILE @pos > 0 BEGIN SET @tmpval = ltrim(rtrim(left(@tmpstr, @pos - 1))) INSERT @tbl (str, nstr) VALUES(@tmpval, @tmpval) SET @tmpstr = substring(@tmpstr, @pos + 1, len(@tmpstr)) SET @pos = charindex(@delimiter, @tmpstr) END
SET @leftover = @tmpstr END
INSERT @tbl(str, nstr) VALUES (ltrim(rtrim(@leftover)), ltrim(rtrim(@leftover))) RETURN END |