2016-06-13 17 views
0

Ich möchte eine AND Bedingung an meine WHERE Klausel basierend auf einer Bedingung angehängt haben. Im Folgenden wird die Situation, die ichAnfügen bedingter AND-Bedingung in SQL Server?

bin vor
DECLARE 
    @param1 INT, @param2 INT 

SET @param1 = 1 
SET @param2 = 1 

SELECT * 
FROM Table1 t1 
INNER JOIN Table2 t2 ON t1.a = t2.b 
INNER JOIN TABLE Table3 t3 ON t3.c = t2.d 
WHERE t1.id = 1 
    AND t2.id = 2 

Hier ist, wo ich die Bedingung will, so kommen in--

Case when `@param1 = 1` and `@param2 = 1` THEN `AND t3.id = 4` 

Aber ich denke, und nicht funktioniert? :/Irgendeine Problemumgehung dafür?

Antwort

0

Sie können die folgenden als AND Bedingung hinzufügen, um zu überprüfen, ob t3.id = 4 wenn @param1 und @param2 beide gleich 1 oder ohne zusätzliche Bedingung, wenn sie es nicht tun:

SELECT * 
FROM Table1 t1 
INNER JOIN Table2 t2 ON t1.a = t2.b 
INNER JOIN Table3 t3 ON t3.c = t2.d 
WHERE 
    t1.id = 1 
    AND t2.id = 2 
And 
(
    (
     @param1 = 1 
    And @param2 = 1 
    And t3.id = 4 
    ) 
    Or 
    (
     @param1 <> 1 
    Or @param2 <> 1 
    ) 
) 
2

Fügen Sie einfach diese auf Ihre where-Klausel

and isnull(t3.id,'') = case when @param1 = 1 and @param2 = 1 then 4 else isnull(t3.id,'') end

+0

danke! genau was ich brauchte :) –

+0

Kein Schweiß. isnull ist wichtig, da null <> null ist. Nur FYSA. – scsimon

1

ich würde schreiben dies als:

where t1.id = 1 and t2.id = 2 and 
     ((@param1 = 1 and @param2 = 1 and t3.id = 4) or 
     not (@param1 = 1 and @param2 = 1) 
    ) 

Dies setzt voraus, dass die Parameter niemals NULL sind.