Es un Store Procedure que recibe varios parámetro int.
Los parámetros son para el WHERE. Si el parámetro es cero no hay que tenerlo
en cuenta.
Para comparaciones sencillas lo he resuelto así:
CREATE PROCEDURE Proc_Ejemplo
(@ idComprador int, @idVendedor int)
AS
SELECT * FROM tabla t
WHERE t.idComprador = CASE WHEN @idComprador = 0 THEN t.idComprador ELSE
@dComprador END AND
t.idVendedor = CASE WHEN @idVendedor = 0 THEN t.idVendedor ELSE
@idVendedor END
La idea es que si el parámetro es 0, en el WHERE se compara el campo con sí
mismo, o sea que el parámetro no se tiene en cuenta. Pero en esta forma de
hacerlo las condiciones se calculan igual.
Es un Store con muchos de esos parámetros, y algunas de las comparaciones
son bastante complejas, así que lo que busco es una solución en la que si el
parámetro es 0 esa condición directamente no exista. Algo así como intento
expresarlo después del AND:
WHERE t.idComprador = CASE WHEN @idComprador = 0 THEN t.idComprador ELSE
@idComprador END AND
CASE WHEN @idVendedor <> 0 THEN t.idVendedor = @idVendedor END
Pero por supuesto así no anda. El CASE es para uno de los términos de la
condición, no para poner o no la condición, que es lo que yo quiero.
Bueno, espero que se me entienda lo que pretendo pero no sé hacer.
Gracias.
Leer las respuestas