te paso un proc que tengo yo para hacer select dinamicos (no dejo que el usuario los escriba, mas bien yo los construyo en base a unas reglas ya establecidas)
Código:
Create procedure SQLDinamico @cTabla as char(25), @cFini as char(25), @cFiltro as char(300), @cCampos as char(150) as
begin
declare @cSql as varchar(2500)
set @cSql = 'Select '+ltrim(Rtrim(@cFini))
if len(ltrim(rtrim(@cCampos)))=0
set @cCampos = ' * '
set @cSql = @cSql +' '+ltrim(rtrim(@cCampos)) + ' From '+ ltrim(rtrim(@cTabla)) + ' '+ltrim(rtrim(cast(@cFiltro as char(300))))
--Para debugear puedes descomentar esto:
/*
Print @cSql
-- que dara como resultado como esta formando la instruccion
*/
exec sp_sqlexec @cSql
end
uso:
Primer parametro: Tabla en la que se realiza el select
segundo: funcion a utilizar (distinct, top, etc)
tercero: Filtro a usar (where, order by, group, etc, van aca)
Cuarto: campos a
te pongo un par de ejemplos
exec SQLDinamico 'tbl_asegs_humano','distinct ',' order by id_linea','id_linea'
exec SQLDinamico 'tbl_asegs_humano','Top 100 ',' where vigor =0 order by id_linea','*'
Saludos