Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieser Artikel hilft Ihnen, ein Problem zu umgehen, das auftritt, da eine gespeicherte Prozedur in einer Datenbank, die das Feature "Query Data Store" verwendet, regelmäßig fehlschlägt.
Originalproduktversion: SQL Server 2016
Ursprüngliche KB-Nummer: 4465511
Symptome
Stellen Sie sich folgendes Szenario vor:
Sie verfügen über eine Microsoft SQL Server 2016-Datenbank, die das Feature "Abfragespeicher" verwendet.
Sie verfügen über eine gespeicherte Prozedur, die mithilfe der
INSERT...EXECSyntax einen Aufruf an eine andere gespeicherte Prozedur ausführt.Die Query Store-Funktion führt in regelmäßigen Abständen eine automatische Bereinigung durch, wenn sie ihre maximal konfigurierte Größe erreicht. Darüber hinaus ändert sich der Status des Abfragedatenspeichers von
READ_WRITEzuREAD_ONLY.
In diesem Szenario schlägt die Ausführung der übergeordneten gespeicherten Prozedur regelmäßig fehl, und Sie erhalten eine Fehlermeldung, die etwa wie folgt aussieht:
Msg 556, Level 16, State 2, Line LineNumber
Fehler bei INSERT EXEC, da die gespeicherte Prozedur das Schema der Zieltabelle geändert hat.
Ursache
Der Prozess für die automatische Bereinigung entfernt den Plan aus dem Query Data Store. Die Abfrage wird neu kompiliert, da der Plan im Query Data Store fehlt. Der Plan ist jedoch weiterhin im Prozedurcache vorhanden. Systembedingt löst SQL Server bei der Neukompilierung des Vorgangs den Fehler 556 aus, um die doppelte Ausführung der untergeordneten Prozedur zu verhindern. Ein solcher Duplikatvorgang würde dazu führen, dass falsche Ergebnisse zurückgegeben werden.
Auflösung
Service Pack-Informationen für SQL Server 2016
Dieses Problem wurde im folgenden Service Pack für SQL Server behoben:
Service Pack 3 für SQL Server 2016
Informationen zu Service Packs für SQL Server:
Service Packs sind kumulativ. Jedes neue Service Pack enthält alle Fixes, die sich in früheren Service Packs befinden, zusammen mit allen neuen Fixes. Es wird empfohlen, das neueste Service Pack und das neueste kumulative Update für dieses Service Pack anzuwenden. Sie müssen kein vorheriges Service Pack installieren, bevor Sie das neueste Service Pack installieren. Weitere Informationen zum neuesten Service Pack und zum neuesten kumulativen Update finden Sie in Tabelle 1 im folgenden Artikel:
So bestimmen Sie die Version, Edition und Updateebene von SQL Server und seiner Komponenten
Behelfslösung
Gehen Sie folgendermaßen vor, um dieses Problem zu umgehen:
Vergrößern Sie die Größe des Abfragedatenspeichers. Dies reduziert die Häufigkeit oder Wahrscheinlichkeit, dass der Query Data Store den Plan löscht und in den
READ_ONLYBetriebsmodus wechselt.Fügen Sie dem Code Fehlerbehandlung hinzu, um Fehler 556 abzufangen, und übermitteln Sie die
INSERT EXECAbfrage erneut.Löschen Sie den Prozedurcache, wenn der Abfragedatenspeicher aus dem Zustand
READ_ONLYin den ZustandREAD_WRITEzurückkehrt.
Weitere Informationen
Aufgrund der Änderungen, die an dem Abfragedatenspeicher in Microsoft SQL Server 2017 vorgenommen wurden, tritt dieses Problem in SQL Server 2017 nicht auf.