Arnie Geschrieben 13. Mai 2003 Teilen Geschrieben 13. Mai 2003 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
fireworker Geschrieben 13. Mai 2003 Teilen Geschrieben 13. Mai 2003 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Arnie Geschrieben 13. Mai 2003 Autor Teilen Geschrieben 13. Mai 2003 Original geschrieben von fireworker Was steht in Zeile 5? Welcher Code? SELECT nicht mehr und nicht weniger. Was anderes steht dort nicht! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
HolzOnkel Geschrieben 13. Mai 2003 Teilen Geschrieben 13. Mai 2003 ...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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Arnie Geschrieben 13. Mai 2003 Autor Teilen Geschrieben 13. Mai 2003 @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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.