Gibt es eine Möglichkeit, Teile einer SQL-Anweisung basierend auf deklarierten Werten auszuschließen?SQL Verwenden Sie Declare, um Where-Klausel-Elemente zu ignorieren
Zum Beispiel;
DECLARE @OnlyY as VARCHAR(1) = 'Y'
SELECT count(*) from main where IDATE > '2016-01-01'
If @OnlyY = 'Y' THEN
AND Qualify = 'Y'
END IF
In diesem Fall, wenn @OnlyY nicht Y ist dann der Teil zwischen dem if/endif nicht passieren würde.
Der Grund, den ich brauche, ist, weil ich eine Access 97-Anwendung auf .NET portiere. In der Access 97-Anwendung gibt es einen Teil, der eine temporäre Tabelle erstellt und dann einen Bericht aus dieser Tabelle generiert. Das involvierte SQL ist eine riesige Menge von if/then Anweisungen, die Daten aus der temporären Tabelle entfernen. Ich bin in der Lage, die DataTable zum Anzeigen in einer Datagridview zu erstellen. Mein Problem ist, dass ich eine SSRS nicht bekommen kann, um die gleiche Flexibilität wie .NET in den if/then Anweisungen zu haben.
Also, wie soll ich das machen?
Dies ist, was ich fast gesucht habe. Ich musste() um das '@OnlyY =' Y 'setzen und DANN zu BEGIN und ENDE IF zu END wechseln. Ansonsten, danke. Ich hatte keine Ahnung, dass das möglich war. Jetzt muss ich es vor einem Injektionsangriff schützen. – Kayot
Willkommen, Tippfehler meinerseits. Das Schöne an dieser Lösung ist, dass Sie dynamisch zu Ihrer 'Where'-Klausel hinzufügen können. Der Nachteil hierbei ist, dass die Ausführung der Abfrage zu diesem Zeitpunkt nicht optimiert ist, da sie dynamisch ist und nicht zwischengespeichert wird, sondern dass Bedingungen dynamisch hinzugefügt werden können, wenn Sie dies benötigen. – Codexer