Where In usando Variables varchar.

Posted on
  • martes, 15 de noviembre de 2011
  • by
  • Román
  • in
  • Etiquetas: , ,

  • 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

    0 comentarios:

    Publicar un comentario