MSSQL: Where durch Variable ändern
Ich versuche in Abhängigkeit von einer @variablen eine Abfragebedingung zu ändern:
SELECT COUNT(*) FROM [SQL-Tabelle] WHERE IIF (@Variable IS NULL, [Tabellenspalte] IS NULL, [Tabellenspalte] = @variable)
Ergebnis: Falsche Syntax in der Nähe des IS-Schlüsselworts.
SELECT COUNT(*) FROM [SQL-Tabelle] WHERE CASE @variable when is null then [Tabellenspalte] IS NULL else [Tabellenspalte] = @variable END
Erbegnis: Falsche Syntax in der Nähe des case-Schlüsselworts.
Versuche mit HAVING scheitern ebenfalls an der Syntax.
Frage, ist eine Änderung der WHERE-Bedingung auf diesem Weg überhaupt möglich ?
Danke für jede Antwort im Voraus
PCFJKG
SELECT COUNT(*) FROM [SQL-Tabelle] WHERE IIF (@Variable IS NULL, [Tabellenspalte] IS NULL, [Tabellenspalte] = @variable)
Ergebnis: Falsche Syntax in der Nähe des IS-Schlüsselworts.
SELECT COUNT(*) FROM [SQL-Tabelle] WHERE CASE @variable when is null then [Tabellenspalte] IS NULL else [Tabellenspalte] = @variable END
Erbegnis: Falsche Syntax in der Nähe des case-Schlüsselworts.
Versuche mit HAVING scheitern ebenfalls an der Syntax.
Frage, ist eine Änderung der WHERE-Bedingung auf diesem Weg überhaupt möglich ?
Danke für jede Antwort im Voraus
PCFJKG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 282133
Url: https://administrator.de/contentid/282133
Ausgedruckt am: 24.11.2024 um 04:11 Uhr
11 Kommentare
Neuester Kommentar
Moin,
Du must Case verwenden. If geht soweit ich weiß nicht.
WHERE OrderNumber LIKE
CASE WHEN IsNumeric(@OrderNumber) = 1 THEN
@ordernumber
ELSE
'%' + @ordernumber
END
Du hast nicht geschrieben von wo der Aufruf erfolgt.
Häufig ist es viel einfacher in dem System davor den Aufruf zu ändern oder auszuwähen. Z.B. in PHP oder ähnliches.
Viele Grüße
Stefan
Du must Case verwenden. If geht soweit ich weiß nicht.
WHERE OrderNumber LIKE
CASE WHEN IsNumeric(@OrderNumber) = 1 THEN
@ordernumber
ELSE
'%' + @ordernumber
END
Du hast nicht geschrieben von wo der Aufruf erfolgt.
Häufig ist es viel einfacher in dem System davor den Aufruf zu ändern oder auszuwähen. Z.B. in PHP oder ähnliches.
Viele Grüße
Stefan
Hallo PCFJKG,
grundsätzlich würde das, was Du suchst, so funktionieren:
Oder ab SQL Server 2012 kann wohl auch IIF eingesetzt werden, dann wäre es:
Aber an dieser Stelle ist das Problem, daß <Wert1> dann NULL wäre und somit der Vergleich mit dem Operator "=" fehlerhaft ist. Allerdings würde ich Deine Abfrage wahrscheinlich mit:
lösen, wobei <x> ein Wert sein müßte, der nicht auftreten kann, sonst könnte das das Ergebnis auch wieder verfälschen.
Gruß, Mad Max
grundsätzlich würde das, was Du suchst, so funktionieren:
SELECT COUNT(*) FROM [SQL-Tabelle] WHERE [Tabellenspalte] = CASE when @Variable is null then <Wert1> else @Variable END
Oder ab SQL Server 2012 kann wohl auch IIF eingesetzt werden, dann wäre es:
SELECT COUNT(*) FROM [SQL-Tabelle] WHERE [Tabellenspalte] = iif (@Variable is null, <Wert1>, @Variable)
Aber an dieser Stelle ist das Problem, daß <Wert1> dann NULL wäre und somit der Vergleich mit dem Operator "=" fehlerhaft ist. Allerdings würde ich Deine Abfrage wahrscheinlich mit:
SELECT COUNT(*) FROM [SQL-Tabelle] WHERE IsNull ([Tabellenspalte], <x>) = IsNull (@Variable, <x>)
Gruß, Mad Max