Update: Gleichzeitige Ausführung von gespeicherten Prozeduren, der neu kompiliert kann fehlschlagen, bis alle Anweisungen ausführen

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 250506 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
# FEHLER: 55251 (SQLBUG_70)
Alles erweitern | Alles schließen

Problembeschreibung

Eine gespeicherte Prozedur kann im Hintergrund fehlschlagen, zum Ausführen aller Anweisungen darin enthalten, wenn folgenden Bedingungen erfüllt sind:

  • Mehrere Verbindungen sind gleichzeitig dieselbe Prozedur ausführen.

  • Ein Verweis ist auf eine außerhalb der diese Prozedur erstellte temporäre Tabelle erstellt.

  • Eine oder mehrere Anweisungen, die auch eine erneute Kompilierung (potenziell von 'Auto Update Statistics' ausgelöst) verursachen könnten folgen Sie den Verweis auf diese temporäre Tabelle.
Alle Anweisungen möglicherweise für einige der Benutzer Ausführen der Prozedur, während andere Fehler ausführen.

Abhilfe

Erstellen der Prozedur mit der WITH RECOMPILE-Klausel, oder die WITH RECOMPILE-Klausel verwenden, beim Ausführen der Prozedur.

Status

Microsoft hat ein Problem in SQL Server 7.0 dazu bestätigt. Dieses Problem wurde in Standard Service Pack 2 für Microsoft SQL Server 7.0 behoben. Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
254561Info: Wie Sie Service Pack 2 für Microsoft SQL Server 7.0 und Microsoft Data Engine (MSDE) 1.0 erhalten
Wenden Sie sich an Ihren primären Supportanbieter, um weitere Informationen zu erhalten.

Weitere Informationen

Wenn eine außerhalb der aktuellen Prozedur erstellte temporäre Tabelle verwiesen wird, dass Anweisung und alle nachfolgenden Anweisungen nicht können beim ersten Ausführen der Prozedur kompiliert werden. Dies ist, da keine Informationen über das Schema der Tabelle bezeichnet wird. Sobald Ausführung dieser Anweisung erreicht, und die Schema- und Kardinalität Werte verfügbar sind, wird die Prozedur erneut kompiliert mithilfe dieser Informationen. Um in der Kompilierung zu minimieren, SQL Server wird eine "teilweise Kompilierung" in diesem Fall und generiert nur einen Abfrageplan für Anweisungen bis zu diesem.

Da mehrere Benutzer gemeinsam einen kompilierten Plan verwenden können, serialisiert SQL Server 7.0 Neukompilierungen sicherstellen, dass nur eine der Verbindungen der kompilieren ausführt. Wenn auch die anderen Verbindungen neu zu kompilieren müssen, warten Sie auf der ersten Verbindung beendet seine kompilieren und die Ausführung an die nächste Schritt fortgesetzt.

Wenn eine Situation wird, auftreten wobei zwei Verbindungen sind in verschiedenen Phasen der Ausführung und die das Kompilieren auslöst zuerst vor den Verweis auf die temporäre Tabelle außerhalb der Prozedur erstellt, wird beendet einen Plan zu kompilieren, wenn die Anweisung erreicht wird. Wenn eine zweite Verbindung irgendwo, nachdem diese wird und löst außerdem eine erneute Kompilierung, während die erste Verbindung kompiliert wird, wird die Ausführung fortgesetzt und fälschlicherweise davon ausgeht, dass es alle Anweisungen in den Plan ausgeführt hat.

Wenn Sie WITH RECOMPILE verwenden, wenn die Prozedur erstellt wird oder wenn es ausgeführt wird, die beiden Verbindungen nie derselben kompilierten Plan freigeben und treten niemals diese Bedingung.

Wo möglich, ist es auch ratsam, die nicht auf eine außerhalb der aktuellen Prozedur erstellte temporäre Tabelle verweisen, als es immer eine erneute Kompilierung der Prozedur erfordert. Andere Programmiertechniken für gespeicherte Prozeduren können in SQL Books Online unter dem Thema "Transact-SQL-Tipps" gefunden werden.

Um festzustellen, wenn eine Prozedur neu kompiliert werden ist, können Sie das SP: RECOMPILE-Ereignis in SQL Profiler ansehen.

Eigenschaften

Artikel-ID: 250506 - Geändert am: Dienstag, 4. Februar 2014 - Version: 2.0
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft SQL Server 7.0 Standard Edition
Keywords: 
kbnosurvey kbarchive kbmt kbbug kbfix KB250506 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 250506
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com