Warum funktioniert das nicht?
%Vor%Siehe SQL Geige-Demo .
Die Unterabfrage sollte Daten ausfiltern, die nicht numerisch sind, und die äußere Abfrage überträgt dies auf eine ganze Zahl, so dass ich nach etwas suchen kann & gt; 2.
Es sieht so aus, als würde die where-Klausel der äußeren Abfrage zuerst ausgeführt. Wie komme ich damit um?
Sehr interessant, ich habe versucht, dies auf SQL Server zu reproduzieren und als nächstes zu finden. Ich habe Ihre Abfrage in simple geändert, um sicherzustellen, dass die Abfrage nicht fehlschlägt und ich den Ausführungsplan sehen kann:
%Vor%Der Ausführungsplan hat Table Scan mit Prädikat:
%Vor%Dies liegt daran, dass die SQL-Optimierungs-Engine auf diese Weise funktioniert (wie jemand sagte - niemand kann Ihnen die Reihenfolge der where-Klauseln garantieren). Eine Möglichkeit, dies zu beheben, ist wahrscheinlich die Verwendung von ISNUMERIC vor
%Vor% Die Kommentare erklären, wie der Ausführungsplan (manchmal) auswählen kann, ob cast
vor like
ausgewertet werden soll. Eine case
Aussage kann die Reihenfolge der Auswertung unterstützen, aber wie Adams erwähnt, ist diese Methode nicht 100%.
Sie können dies versuchen, in der folgenden Abfrage wird die erste Bedingung ausgeführt und wenn sie fehlschlägt, führt sie die zweite Bedingung nicht aus
%Vor%Und um zu beantworten, warum Ihre Anfrage nicht funktioniert, überprüfen Sie diese Erklärung hier
Tags und Links sql sql-server tsql