Heim >Datenbank >MySQL-Tutorial >Wie behandle ich Update -Abfragen mit Ausgangsklausel, wenn Trigger existieren?
Beim Versuch, eine UPDATE-Abfrage auszuführen, die eine OUTPUT-Klausel enthält, kann Fehler 334 auftreten: „Wenn die Anweisung eine OUTPUT-Klausel ohne INTO-Klausel enthält, kann die Zieltabelle keine aktivierten Trigger haben. Dieser Fehler tritt insbesondere auf, wenn a Der Trigger ist in der Zieltabelle vorhanden.
Um dieses Problem zu beheben, ändern Sie die Abfrage, um den erforderlichen Wert abzurufen, bevor Sie die Aktualisierung durchführen:
<code class="language-sql">SELECT BatchFileXml, ResponseFileXml, ProcessedDate FROM BatchReports WHERE BatchReports.BatchReportGUID = @someGuid UPDATE BatchReports SET IsProcessed = 1 WHERE BatchReports.BatchReportGUID = @someGuid</code>
Dieser Ansatz vermeidet die Verwendung einer OUTPUT-Klausel und lindert dadurch Kompatibilitätsprobleme, die durch Trigger verursacht werden.
Die Verwendung der OUTPUT-Klausel mit Triggern kann zu einem falschen Datenabruf führen. Insbesondere ruft die OUTPUT-Klausel den Wert basierend auf dem Status der Zeile zum Zeitpunkt der Änderung ab, anstatt den Wert erst nach Abschluss der Aktualisierung abzurufen. Dies kann zu falschen oder veralteten Daten in den OUTPUT-Ergebnissen führen.
Versuche, dieses Problem mithilfe von TABLE-Zwischenvariablen zu umgehen, haben sich ebenfalls als erfolglos erwiesen. Das Einfügen von Zeitstempeln in Tabellenvariablen ist nicht zulässig, und selbst wenn Binär(8) zur Darstellung des Zeitstempels verwendet wird, ist der zurückgegebene Wert falsch, da der Wert abgerufen wird, bevor die Aktualisierung abgeschlossen ist.
Das obige ist der detaillierte Inhalt vonWie behandle ich Update -Abfragen mit Ausgangsklausel, wenn Trigger existieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!