verwendetes Datenbanksystem: SQL Server 2005
DECLARE @s int
SELECT * FROM sys.sysobjects WHERE @s is null OR name in ( SELECT name FROM sys.syscolumns)
Im Ausführungsplan stelle ich fest, dass das SubSelect auf die syscolumns ausgeführt wird, obwohl @s immer null ist (setze es ja nie).
Wie kann ich das oben angeführte Statement absetzen, ohne dass der Server durch die syscolumns durch muss?
(Das Statement ist natürlich nur beispielhaft, ich brauch so was ähnliches natürlich für meine Echt-Tabellen, und ich will verhindern, dass zuviele Daten abgefragt werden, wenns gar nicht gebraucht wird)
Hallo tkrassinger,
im Grunde macht die Abfrage genau das was sie machen soll da bei einem "OR" immer beide Ausdrücke ausgewertet werden.
So ganz ist mir deine Abfrage aber auch nicht klar. Suchst du eine Art "oder Operator" wie bei C#, (| oder ||) bei dem der zweite Ausdruck nur ausgewerter wird, wenn der erste false ergibt?
Viele Grüße
Sebastian
Ja, in C# wird bei einem OR (also ||) auch nur bis dahin ausgewertet, wo das OR evtl. noch negativ werden könnte.
Genau sowas bräuchte ich jetzt auch am SQL Server.
Hmm,
da ich deine Abfrage nicht kenne, kann ich jetzt nur drauf los raten. Aber wie würde es mit einem "CASE WHEN THEN" aussenen?
Sebastian
Wie soll ich das CASE in die WHERE Klausel bringen? Kannst du mir das anhand meines Beispiels vom Startbeitrag zeigen? Das Echtbeispiel kann ich das zu 99% genauso machen.
Ich dachte da mehr an ein Dynamisches SQL oder zwei Abfragen die je nach "Vorauswahl" die entsprechende WHERE Klausel haben.
Hallo tkrasinger
Du kannst die Reihenfolge in der die Kriterien von SQL Server ausgewertet werden (eigentlich) nicht beeinflussen.
Ich würde dir, wie Sebastian, auch empfehlen dynamisches SQL zu verwenden. Ist zwar nicht ganz so schick, aber dein Statement riecht für mich nach einer typischen Catch All Query und damit wirst du schnell massive Performance-Probleme bekommen.
Grüße
Flo
Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+
Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.
@Florian:
Danke für deinen Beitrag. Da hab ich wohl noch einiges zu überdenken.
Danke für dein Feedback. Freut mich wenn wir helfen konnten!
Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+
Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.