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
Please also mark the comments that contributed to the solution of the article
Content-Key: 282133
Url: https://administrator.de/contentid/282133
Printed on: April 26, 2024 at 16:04 o'clock
11 Comments
Latest comment
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