Zum Inhalt springen

MSSQL2000: Fehler kommt nur manchmal...


Arnie

Empfohlene Beiträge

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

...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... :(

Link zu diesem Kommentar
Auf anderen Seiten teilen

@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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...