Ich arbeite an der Optimierung einiger häufig verwendeter gespeicherter Prozeduren und lief über ein Szenario, das eine Frage aufwarf, für die ich keine Antworten finden konnte: Wenn TSQL in einer gespeicherten Prozedur ausgewertet wird, schließt SQL Server die IF
Anweisung kurz?Verletzt SQL Server IF-Anweisungen?
zum Beispiel angenommen, ein Code der gespeicherten Prozedur hat ähnlich wie:
IF @condition1 = 1
OR EXISTS(SELECT 1 FROM table1 WHERE column1 = @value1)
...
In diesem Szenario funktioniert SQL Server Kurzschluss der Auswertung, so dass die EXISTS
Anweisung nie ausgeführt wird, wenn die vorhergehende Klausel true ergibt?
Wenn es nie oder nur manchmal tut, dann haben wir etwas Umschreiben vor uns.
Nicht garantiert. Überprüfen Sie den Ausführungsplan, um festzustellen, ob dies in Ihrem Fall der Fall ist. –
Danke, 'nicht garantiert' ist, was ich gesucht habe. Das Problem besteht darin, dass diese gespeicherten Prozeduren auf Hunderten von Kunden-DBs ausgeführt werden. Wenn der Ausführungsplan dies feststellt, können wir nicht davon ausgehen, dass sie auf jedem Kundensystem gleich ausgewertet werden und neu geschrieben werden müssen. –
Wenn Sie eine Garantie auf Gusseisen haben möchten, dann wird das Aussortieren in mehrere "if" -Anweisungen das tun. Als ich das vorher sah (http://stackoverflow.com/a/5543985/73226) fand ich einige Beispiele dafür, die nicht kurzschließen. Sie könnten auch nach Fallanweisungen suchen. –