Einzelnen Beitrag anzeigen

jensw_2000
(Gast)

n/a Beiträge
 
#1

MSSQL: WHERE in Stored Procedure "optional gestalten&qu

  Alt 14. Feb 2005, 15:23
Datenbank: MSSQL • Version: 2000 • Zugriff über: TSQL
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
  Mit Zitat antworten Zitat