Hacer un solo select

18/10/2006 - 19:26 por Erik Martinez | Informe spam
hola a todos.

a continuación les presento un procedimiento almacenado que hice:

CREATE PROCEDURE sp_ProdEstOri
@Filtro int,
@Valor int
as

if @filtro=1
begin
select listacampos from tablas
end
else
begin
if @filtro=2
begin
select listacampos from tablas where campo1=@valor
end
else
begin
if @filtro=3
begin
select listacampos from tablas where campo2=@valor
end
else
begin
select listacampos from tablas where campo3=@valor
end
end
end
go

notaran que las diferencias en los 4 select es: que en el primero no existe
la clausula where.
y en los otros 3 el nombre del campo cambia en la clausula where.

¿De que forma puedo hacer un solo select y cambiar la condición por medio
de una variable.?

de antemano muchas gracias.

Preguntas similare

Leer las respuestas

#1 Miguel Egea
18/10/2006 - 19:46 | Informe spam
Poderse se puede, pero este método te dará mayor rendimiento casi con total
seguridad, de todas formas te daría mayor rendimiento tener 4 procedimientos
almacenados distintos y decidir a cual llamas en la aplicacion.

El motivo es que los procedimientos están en caché con un plan de ejecución
que se creará cuando llames la primera vez a este procedimiento y eso
dependiendo de lo que valga "valor" puede ser bueno o malo para el resto de
las ejecuciones.

Saludos
Miguel Egea


"Erik Martinez" <nadie@@microsoft.com> wrote in message
news:%
hola a todos.

a continuación les presento un procedimiento almacenado que hice:

CREATE PROCEDURE sp_ProdEstOri
@Filtro int,
@Valor int
as

if @filtro=1
begin
select listacampos from tablas
end
else
begin
if @filtro=2
begin
select listacampos from tablas where campo1=@valor
end
else
begin
if @filtro=3
begin
select listacampos from tablas where campo2=@valor
end
else
begin
select listacampos from tablas where campo3=@valor
end
end
end
go

notaran que las diferencias en los 4 select es: que en el primero no
existe la clausula where.
y en los otros 3 el nombre del campo cambia en la clausula where.

¿De que forma puedo hacer un solo select y cambiar la condición por medio
de una variable.?

de antemano muchas gracias.


Respuesta Responder a este mensaje
#2 Alejandro Mesa
18/10/2006 - 19:51 | Informe spam
Erik,

Preferible que crees cuatro procedimientos y llames al indicado desde tu
aplicacion cliente.


AMB


"Erik Martinez" wrote:

hola a todos.

a continuación les presento un procedimiento almacenado que hice:

CREATE PROCEDURE sp_ProdEstOri
@Filtro int,
@Valor int
as

if @filtro=1
begin
select listacampos from tablas
end
else
begin
if @filtro=2
begin
select listacampos from tablas where campo1=@valor
end
else
begin
if @filtro=3
begin
select listacampos from tablas where campo2=@valor
end
else
begin
select listacampos from tablas where campo3=@valor
end
end
end
go

notaran que las diferencias en los 4 select es: que en el primero no existe
la clausula where.
y en los otros 3 el nombre del campo cambia en la clausula where.

¿De que forma puedo hacer un solo select y cambiar la condición por medio
de una variable.?

de antemano muchas gracias.



Respuesta Responder a este mensaje
#3 Lord Voldemort
18/10/2006 - 20:04 | Informe spam
Hola Alejandro..

Digamos que el unico inconveniente que he tenido de tener varios SP es que
la BD ya lleva unos 600 SP, y cada vez son 4 SP mas, decidi hacer (asi como
erik) en ves de 4 hacer uno, pero hay que hacer los 4 select con un tantito
de diferencia. por eso tambien estoy interesado en la posible solucion... o
de plano seguir haciendo varios ...

saludos..


Jairo Hernandez






"Alejandro Mesa" wrote in message
news:60E
Erik,

Preferible que crees cuatro procedimientos y llames al indicado desde tu
aplicacion cliente.


AMB


"Erik Martinez" wrote:

hola a todos.

a continuación les presento un procedimiento almacenado que hice:

CREATE PROCEDURE sp_ProdEstOri
@Filtro int,
@Valor int
as

if @filtro=1
begin
select listacampos from tablas
end
else
begin
if @filtro=2
begin
select listacampos from tablas where campo1=@valor
end
else
begin
if @filtro=3
begin
select listacampos from tablas where campo2=@valor
end
else
begin
select listacampos from tablas where campo3=@valor
end
end
end
go

notaran que las diferencias en los 4 select es: que en el primero no
existe
la clausula where.
y en los otros 3 el nombre del campo cambia en la clausula where.

¿De que forma puedo hacer un solo select y cambiar la condición por medio
de una variable.?

de antemano muchas gracias.



Respuesta Responder a este mensaje
#4 Alejandro Mesa
18/10/2006 - 21:52 | Informe spam
Lord Voldemort,

Estas sentencias no tienen relacion entre ellas, asi que separarlas en
distintos sps ayudara a que SQL Server compile el sp mas rapido, que el plan
compilado en cache sea mejor utilizado, que los requeriminetos de cada
sentencia esten aislados, etc. Existe un caso especial cuando queremos hacer
una busqueda dinamica, osea, que el filtro de la clausula "where" tome en
cuenta los parametros de entrada aunque estos sean nulos. Para ese tipo de
consulta te recominedo leer el siguiente articulo.

Dynamic Search Conditions in T-SQL
http://www.sommarskog.se/dyn-search.html


AMB


"Lord Voldemort" wrote:

Hola Alejandro..

Digamos que el unico inconveniente que he tenido de tener varios SP es que
la BD ya lleva unos 600 SP, y cada vez son 4 SP mas, decidi hacer (asi como
erik) en ves de 4 hacer uno, pero hay que hacer los 4 select con un tantito
de diferencia. por eso tambien estoy interesado en la posible solucion... o
de plano seguir haciendo varios ...

saludos..


Jairo Hernandez






"Alejandro Mesa" wrote in message
news:60E
> Erik,
>
> Preferible que crees cuatro procedimientos y llames al indicado desde tu
> aplicacion cliente.
>
>
> AMB
>
>
> "Erik Martinez" wrote:
>
>> hola a todos.
>>
>> a continuación les presento un procedimiento almacenado que hice:
>>
>> CREATE PROCEDURE sp_ProdEstOri
>> @Filtro int,
>> @Valor int
>> as
>>
>> if @filtro=1
>> begin
>> select listacampos from tablas
>> end
>> else
>> begin
>> if @filtro=2
>> begin
>> select listacampos from tablas where campo1=@valor
>> end
>> else
>> begin
>> if @filtro=3
>> begin
>> select listacampos from tablas where campo2=@valor
>> end
>> else
>> begin
>> select listacampos from tablas where campo3=@valor
>> end
>> end
>> end
>> go
>>
>> notaran que las diferencias en los 4 select es: que en el primero no
>> existe
>> la clausula where.
>> y en los otros 3 el nombre del campo cambia en la clausula where.
>>
>> ¿De que forma puedo hacer un solo select y cambiar la condición por medio
>> de una variable.?
>>
>> de antemano muchas gracias.
>>
>>
>>



Respuesta Responder a este mensaje
#5 Erik Martinez
18/10/2006 - 22:05 | Informe spam
Bueno ese tipo de select lo tengo que hacer en muchas operaciones ya que es
para filtrar reportes y gráficos y no quiero llegar a tener una barbaridad
de
procedimientos almacenados.
ojala pudieran recomendarme algo mejor.
Un compañero me ayudo a realizar un solo select, a continuación se los
presento y asi saber sus comentarios y recomendaciones con respecto a esto.
CREATE PROCEDURE sp_ProdEstOri
@Filtro int,
@Valor int
as
select * from tablas where
campo1=case when @Filtro=2 then @Valor else campo1 end and
campo2=case when @Filtro=3 then @Valor else campo2 end and
campo3=case when @Filtro=4 then @Valor else campo3 end
go
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida