13. Mai 200323 j Hallo miteinander, ich habe eine längere (7 DIN A4 Seiten) SQL Abfrage zu überprüfen, in welcher beizeiten (in unregelmäßigen Abständen) eine Fehlermeldung auftritt: Server: Nachr.-Nr. 8623, Schweregrad 16, Status 2, Zeile 5 Interner Fehler des Abfrageprozessors: Der Abfrageprozessor konnte keinen Abfrageplan erzeugen. Jetzt soll ich die Abfrage in ihre Einzelteile zerlegen, um den Fehler zu finden. Bin mir aber nicht ganz sicher, ob man ihn, wenn er eh nur alle paar Durchläufe mal auftritt, auftauchen wird. Hatte jemand auch schonmal einen ähnlichen Fehler und kann mir einen Tipp geben? MfG Arnie P.S.: In der Abfrage werden u.a. die Befehle: Union, Sum, DateAdd, Count, Case, etc. verwendet.
13. Mai 200323 j Original geschrieben von Arnie Hallo miteinander, ich habe eine längere (7 DIN A4 Seiten) SQL Abfrage zu überprüfen, in welcher beizeiten (in unregelmäßigen Abständen) eine Fehlermeldung auftritt: Server: Nachr.-Nr. 8623, Schweregrad 16, Status 2, Zeile 5 Interner Fehler des Abfrageprozessors: Der Abfrageprozessor konnte keinen Abfrageplan erzeugen. Was steht in Zeile 5? Welcher Code?
13. Mai 200323 j Original geschrieben von fireworker Was steht in Zeile 5? Welcher Code? SELECT nicht mehr und nicht weniger. Was anderes steht dort nicht!
13. Mai 200323 j ...naja.. "Select und nicht mehr und nicht weniger" ist ein wenig arg unspezifisch - der SQL-Server interpretiert die ganze Select-Anweisung in eine Zeile, also auch das, was bei Dir eine Zeile tiefer steht... Beispiel: SELECT feld1, feld2, feld3... ist für den gleich wie: SELECT feld1, feld2, feld3 ... Die Fehlermeldung hatte ich auch schon ein paar Mal. Hierzu hatte ich folgende Probleme, die auftauchten: 1) Eine der benutzten Untermengen war leer bzw. NULL und konnte damit nicht mehr in die Abfrage einfliessen. 2) Eine der benutzten Untermengen ergab einen undefinierten Zustand zurück, also zum Beispiel in einer Wherebedingung des Selects: WHERE feld1 = (SELECT feld1 FROM tabelle WHERE Bedingung = Irgendwas) 3) Eine Ergebnismenge wird zu gross. :-/ Der Server packt nur eine gewisse Anzahl von Ergebniszeilen für eine Unterabfrage. 4) Wenn Du Variablen übergibst in Form von: WHERE feld = ?Variable ... oder .... WHERE feld IN (?Variable) ...dann kann es vor allem bei Variante 2 passieren, dass die zulässige Stringlänge für Variablen, (die beim SQL-Server irgendwo einstellbar ist) überschritten wird. 5) Der Server geht schlichtweg der für einen Task maximal bereitgestellte Speicher aus. :-/ 6) In den CASE-Anweiseungen, stehen da zufälligerweise noch ein paar andere Subselects/Ergebnismengen? Der SQL-Server kann, soweit ich das weiss, nur eine gewisse Anzahl an Ergebnismengen in eine Abfrage packen (wieviele das sind, weiss ich jetzt auch nicht). Wenn er also nur 255 Ergebnismengen verwalten kann, und Du erzeugst 300, dann hast Du Pech gehabt, weil ja jede Abfrage erstmal durch diesen Abfrageprozessor geht... 7) Greifst Du in der Abfrage auf temporäre Tabellen zu, welche Namensgleich sind, sich aber inhaltlich unterscheiden? ... das war es erstmal von mir. Noch was - glaub dieser Fehlermeldung nicht zu sehr. Die Fehlermeldung hat ab und zu nix mit dem Fehler zu tun...
13. Mai 200323 j @Holz Onkel: Dieser Beitrag war echt mal schön ausführlich. Vielen Dank. Kann mir eigentlich nur vorstellen, dass SQL dann der Speicher ausgeht, da in den ganzen anderen Fällen der Fehler immer auftreten müsste... Erzeuge jetzt einfach eine temporäre Tabelle und "update" diese 8 mal, anstatt 8 mal mit dem UNION Befehl zu arbeiten. Bisher hat er mir dann keinen Fehler mehr ausgegeben. Finde es nur sehr kurios, dass das passiert... Mich würde mal interessieren, ob MySQL diesen Fehler auch produziert oder ob das mal wieder ein hausgemachter Microsoft Fehler ist... Danke auf jeden Fall erstmal Arnie
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.