SQL Server - Condiciones nuevas para un procedimiento

 
Vista:
sin imagen de perfil
Val: 55
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

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 :
1
2
3
4
5
ALTER PROCEDURE [dbo].[PreciosUnificados]
	-- Add the parameters for the stored procedure here
	@idConcesion nvarchar,
	@idLinea int,
	@fecha nvarchar
con una serie de Uniones que lo resumo para no alargar el codigo :
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
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
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 55
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Condiciones nuevas para un procedimiento

Publicado por ANTONIO (28 intervenciones) el 27/10/2020 11:06:51
Gracias, me lío un poco respecto a lo que quiero realizar ya que nunca he hecho una consulta dinámica. A ver si consigo desarrollarlo, muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 55
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Condiciones nuevas para un procedimiento

Publicado por ANTONIO (28 intervenciones) el 27/10/2020 12:34:01
Una vez me he situado tengo un problemilla, que mirando por la red no puedo resolver y debe ser una tontería pero no lo resuelvo el error

1
2
3
4
DECLARE @SQLString NVARCHAR(500);
SET @SQLString = N'SELECT * FROM #Tab01 ' +
'WHERE @IdLinea = 0';
EXEC sp_executesql @SQLString, N'@tabla nvarchar(10), @tabla = @tabla';

Incorrect syntax near ';'.

Ignoro si puede ser la versión
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 31
Ha disminuido su posición en 3 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

Condiciones nuevas para un procedimiento

Publicado por Salvador (29 intervenciones) el 28/10/2020 13:55:28
Hola ANTONIO,

Que es lo que quieres hacer, cambiar el nombre de la tabla, cambiar el @IdLinea?

Si quieres cambiar el valor del @IdLinea, sólo tienes que hacer esto:

1
2
3
4
5
6
7
8
DECLARE
  @SQLString nvarchar(500)
  ,@ParmDefinition nvarchar(500);
 
SET @SQLString = 'SELECT * FROM #Tab01 WHERE TUCAMPO = @IdLinea';
SET @ParmDefinition = '@IdLinea int';
 
EXECUTE sp_executesql @SQLString, @ParmDefinition, @IdLinea = 0;
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 55
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Condiciones nuevas para un procedimiento

Publicado por ANTONIO (28 intervenciones) el 28/10/2020 14:22:50
NO @IdLinea ES UN VALOR QUE ME VIENE DADO , VOY A PROBAR CON ESTO Y TIRANDO DESPUES DEL RESTO DE CODIGO A VER. MUCHAS GRACIAS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar