Hola gente
Quisiera saber que opinan de esto, necesito hacer una consulta con varios
filtros que pueden o no ser enviados a la misma, y para ello encontre 2
alternativas, usar un where con un case por cada paraetro o armar un sql
dinamico.
Ejemplo
Create Table TestSelect (Id_Pk int identity(1,1) ,Campo1 varchar(5), Campo2
varchar(5), Campo3 varchar(5))
Create Procedure Test1 @Parametro1 varchar(5) = null, @Parametro2
varchar(5) = null, @Parametro3 varchar(5) = null
as
Select * from TestSelect
where Campo1 = (Case when @Parametro1 is null then Campo1 else
@Parametro1 end)
and Campo2 = (Case when @Parametro2 is null then Campo2 else
@Parametro2 end)
and Campo3 = (Case when @Parametro3 is null then Campo3 else
@Parametro3 end)
O
Create Procedure Test2 @Parametro1 varchar(5) = null, @Parametro2
varchar(5) = null, @Parametro3 varchar(5) = null
as
Declare @Sql nvarchar(4000), @W varchar(20)
set @Sql = 'Select * from TestSelect '
set @W = ' where'
if not @Parametro1 is null
begin
set @Sql = @Sql + @W + ' Campo1 = '''+ @Parametro1 + ''''
set @W = ' and '
end
if not @Parametro2 is null
begin
set @Sql = @Sql + @W + ' Campo2 = '''+ @Parametro2 + ''''
set @W = ' and '
end
if not @Parametro3 is null
begin
set @Sql = @Sql + @W + ' Campo3 = '''+ @Parametro3 + ''''
set @W = ' and '
end
exec Sp_ExecuteSql @Sql
Leer las respuestas