Condiciones nuevas para un procedimiento
Publicado por ANTONIO (28 intervenciones) el 22/10/2020 16:57:29
Hola, tengo un procedimiento, que a grandes rasgos hace lo siguiente :
con una serie de Uniones que lo resumo para no alargar el codigo :
...
Y el select posterior que extrae según maximos, etc.
el caso es que ahora sobre el Id ILinea quiero traer segun un valor (que traigo de visual studio) @idlinea quiero tratar
según sea ese @idlinea distinto de cero o no. Es decir tengo que añadir otro parametro @idlinea y hacer algo asi
como
Esto logicamente no funciona pero es la idea.
Es decir, pasarle un identificador de línea y que incluyese la condición AND en la consulta en función del valor de IdLinea. O lo que es lo mismo si @idlinea <> 0 es que quiero todas las lineas y sino esa línea concreta
Tal cual lo tengo lo primero que se me ocurre es un IF despues de Datos as ( ... y tratar un caso y ELSE y tratar el otro pero se me duplica la consulta
¿habría alguna forma de simplificar? con case en el where, etc.
Muchas gracias
1
2
3
4
5
ALTER PROCEDURE [dbo].[PreciosUnificados]
-- Add the parameters for the stored procedure here
@idConcesion nvarchar,
@idLinea int,
@fecha nvarchar
1
2
3
4
5
6
7
8
9
10
11
12
13
with
Datos as (
select Distinct
a, b, c, d, e,
FROM MPrecios
INNER JOIN MLineas ON MLineas.IdLinea = MPrecios.IdLinea
AND ....
WHERE
MPrecios.Borrado = 0 AND
MPrecios.IdRegActivo IS NULL
UNION
UNION
Y el select posterior que extrae según maximos, etc.
el caso es que ahora sobre el Id ILinea quiero traer segun un valor (que traigo de visual studio) @idlinea quiero tratar
según sea ese @idlinea distinto de cero o no. Es decir tengo que añadir otro parametro @idlinea y hacer algo asi
como
1
2
3
4
if (@idlinea <> 0)
begin
AND Mlineas.Idlinea = @idlinea
end
Es decir, pasarle un identificador de línea y que incluyese la condición AND en la consulta en función del valor de IdLinea. O lo que es lo mismo si @idlinea <> 0 es que quiero todas las lineas y sino esa línea concreta
Tal cual lo tengo lo primero que se me ocurre es un IF despues de Datos as ( ... y tratar un caso y ELSE y tratar el otro pero se me duplica la consulta
¿habría alguna forma de simplificar? con case en el where, etc.
Muchas gracias
Valora esta pregunta


0