Gibt es eine Möglichkeit CASE oder IF in der WHERE Clause zu verbauen, um Bedingungen auszuschliessen ?
Kleines abstraktes Beispiel:
SQL-Code:
CREATE PROCEDURE TEST
@inc_Offene BIT = 0
@inc_Erledigte BIT = 0
@CheckError BIT = 0
AS
BEGIN
--Parameter prüfen
SELECT @CheckError = CASE WHEN (@inc_Offene = 0) AND (@inc_Erledigte =0)
THEN 1
ELSE 0
END
IF @CheckError = 1
BEGIN
RAISEERROR('SP_TEST: Mindestens ein Parameter muß 1 sein',16,1,'Parameter Error')
END
ELSE BEGIN
SELECT bla, bla1, bla2
FROM Tabelle1
-- ab hier wirds interessant
-- geht so nicht ...
WHERE CASE WHEN @inc_Offene=1 AND @inc_Erledigte=0
THEN (stat_Offen = 1) AND (stat_inArbeit = 1) AND (stat_Erledigte =0)
ELSE
CASE WHEN @inc_Offene=0 AND @inc_Erledigte=1
THEN (stat_Offen = 0) AND (stat_inArbeit = 0) AND (stat_Erledigte =1)
ELSE ID IS NOT NULL
END
END
-- IF geht auch nicht :-( ...
END
END
Bisher löse ich das so ...
nur dabei wird die SP unübersichtlich und laaaaaang ....
SQL-Code:
IF @inc_Offene = 1 AND @inc_Erledigte = 0
BEGIN
SELECT bla, bla1, bla2
FROM Tabelle1
WHERE (stat_Offen = 1) AND (stat_inArbeit = 1) AND (stat_Erledigte =0)
END
IF @inc_Offene = 0 AND @inc_Erledigte = 1
BEGIN
SELECT bla, bla1, bla2
FROM Tabelle1
WHERE (stat_Offen = 0) AND (stat_inArbeit = 0) AND (stat_Erledigte =1)
END
IF @inc_Offene = 1 AND @inc_Erledigte = 1
BEGIN
SELECT bla, bla1, bla2
FROM Tabelle1
END
Für dieses kleine Beispiel wäre eine
Query mit Parametern sicher besser angebracht...
Die SP, die ich mit der WHERE "Bedingung" einkürzen will ist jedoch knapp 300 Zeilen lang und hat ihre Existenzberechtigung ...
Kann man die Where Clause überhaupt "optionalisieren" ?
Danke ...
Jens