Where In usando Variables varchar.


Esta es una cuestión que muchas veces queremos resolver, como hacer un where in contra una variable de tipo varchar.
Obviamente que en reporting services está cuestión se resuelve por si misma, pero el punto es cuando queremos ejecutar sentencias con where in dados por una variable.
Está claro que se puede ejecutar por medio de xml o sql dinámico, pero estas soluciones no están exentas de su complejidad.

La solución propuesta en este caso es la creación de una función que transforma el contenido de una variable de tipo varchar en un resultset de integers.

La función

Create function dbo.SplitToInt(@values varchar(8000), @delimiter varchar(10))
returns @result table (value int)
as
begin
declare @v as varchar(8000);
while charindex(@delimiter,@values) <> 0
begin
set @v = substring(@values,1,charindex(@delimiter,@values)-1);
if isnumeric(@v)=1
insert into @result
values(@v);
set @values = substring(@values,charindex(@delimiter,@values)+1,len(@values))
end
if isnumeric(@values)=1
insert into @result
values(@values);
return;
end

Un ejemplo:

declare @sIds varchar(10)
set @sIds = '1,3,4'
select * from tabla where id in (select * from SplitToInt(@sIds, ','))

Hugo Román Bernachea
Mail de contacto: SQLServer777@gmail.com

Microsoft Certified DBA
Microsoft Certified Trainer
Twitter: @bernachea

Read More...