Ich habe sehr lange Abfrage, die ich brauchefiltern basierend auf einigen Parametern, versuche ich zu vermeiden, dass unterschiedliche gespeicherte Prozeduren verwendet werden, oder wenn Anweisungen innerhalb einer gespeicherten Prozedur verwendet werden, indem teilweise dynamisches TSQL verwendet wird ...
Ich werde lange auswählen, nur um zum Beispiel willen
select a
from b
where c=@c
or d=@d
@c und @d sind Filterparameter, nur einer kann filternzur gleichen Zeit können aber auch beide Filter deaktiviert werden. 0 für jedes dieser Mittel bedeutet, dass param deaktiviert ist, sodass ich nvarchar mit where-Anweisung erstellen kann.
Wie kann ich hier dynamische Abfrage integrieren?"wo" kann zur normalen Abfrage hinzugefügt werden. Ich kann die ganze Abfrage nicht als großes nvarchar hinzufügen, da sich zu viele Dinge darin befinden, für die Änderungen erforderlich sind (z. B. Zeitpunkte, Unterabfragen, Verknüpfungen).
Antworten:
5 für die Antwort № 1Wie wäre es mit etwas wie:
SELECT a
FROM b
WHERE (@c IS NULL OR c = @c)
AND (@d IS NULL OR d = @d)
Wenn Sie den Filter nicht verwenden, setzen Sie den Parameter auf NULL
und der Zustand sollte kurzgeschlossen werden.
0 für die Antwort № 2
Ein bisschen spät aber
SELECT a FROM b
WHERE c = isNULL(@c, c) AND d= isNULL(@d, d)