Laden...

IF in WHERE Klausel

Erstellt von Gremgiz vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.319 Views
G
Gremgiz Themenstarter:in
106 Beiträge seit 2006
vor 12 Jahren
IF in WHERE Klausel

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

D
211 Beiträge seit 2006
vor 12 Jahren

Hi

das kannst Du mit einem CASE abbilden

case @Ebene0 when 0 then Feld1 = @Parameter1

CASE (Transact-SQL)

(ungetestet)

Gruß

DevHB

G
Gremgiz Themenstarter:in
106 Beiträge seit 2006
vor 12 Jahren

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 '='

G
538 Beiträge seit 2008
vor 12 Jahren

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)

C
2.121 Beiträge seit 2010
vor 12 Jahren

Was willst du damit denn erreichen?

G
Gremgiz Themenstarter:in
106 Beiträge seit 2006
vor 12 Jahren

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

C
2.121 Beiträge seit 2010
vor 12 Jahren

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.

I
8 Beiträge seit 2011
vor 12 Jahren

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
G
Gremgiz Themenstarter:in
106 Beiträge seit 2006
vor 12 Jahren

Hallo,

das hört sich gut an, werde es mal austesten

Danke
Gremgiz