verwendetes Datenbanksystem: MS SQL Server 2008
Hallo,
eine Frage zur TSQL Programmierung. Kann man innerhalb einer WHERE Klausel eine IF Bedingung verwenden, um verschiedene Parameter zu setzen?
Hier mal ein Beispiel
SELECT Feld1, Feld2, Feld3, Feld4
FROM Tabelle1
WHERE
IF @Ebene = 0 THEN Feld1 = @Parameter2
IF @Ebene = 1 THEN Feld2 = @Parameter2
Das würde mir bei vielen Abfrage das Leben doch erheblich erleichtern
Danke
Gremgiz
Hi
das kannst Du mit einem CASE abbilden
case @Ebene0 when 0 then Feld1 = @Parameter1
(ungetestet)
Gruß
DevHB
Hallo,
geht leider nicht
SELECT Feld1, Feld2, Feld3, Feld4
FROM Tabelle1
WHERE CASE @Ebene
WHEN 0 THEN Feld1 = @Parameter2
WHEN 1 THEN Feld2 = @Parameter2
bringt einen Fehler: Incorrect Syntax near '='
Hallo,
die WHERE Klausel ist eine EINSCHRÄNKUNG - nichts wo man Daten setzt!
Wenn du Parameter setzen willst nutze die SELECT Klausel,
also etwa
SELECT Feld1 = @Parameter1 FROM Tabelle1 WHERE @Ebene = 0
Allerdings brauchst du so gar nicht mehr die Tabelle nutzen sondern kannst auch SET benutzen.
Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)
Hallo,
ich setze in der WHERE Klausel keine Parameter, ich werte sie vielmehr aus. Das ganze ist eine Stored Procedure, auf die von außen zugegriffen wird. Oftmals gibt es den Fall, dass eine tabelle von verschiedenen Quellen aus gelsen werden muss. Meine Idee war es nun für das generelle Lesen von Datensätzen aus der DB eine universelle Stored Procedure zu erstellen, die pauschal in der Lage ist, alle Felder eines Datensatzes zurückzugeben. Welche Datensätze benötigt werden, wird ja über die WHERE Klausel angegeben. Wenn man diese dann noch einschränken könnte (so wie abgebildet), kann man sich das mehrmalige Schreiben der Prozedur sparen.
Ich weiß, dass man solche Abfragen auch über Dynamic SQL machen kann, was mir aber zu aufwendig erscheint bei einfachen Abfragen
Gruß
Gremgiz
Dann suchst du evtl. das da
WHERE (@Ebene = 0 AND Spaltenwert = @Parameter1) OR (@Ebene = 1 AND Spaltenwert = @Parameter2)
Aber gerade bei SQL ist es ratsamer wenn man nicht alles zusammenfasst. Schon aus Gründen der Lesbarkeit.
Mit CASE-WHEN funktioniert die Einschränkung folgendermaßen:
SELECT Feld1, Feld2, Feld3, Feld4
FROM Tabelle1
WHERE CASE @Ebene
WHEN 0 THEN Feld1
WHEN 1 THEN Feld2 END = @Parameter2