帶有觸發器和 OUTPUT 子句的 UPDATE 語句限制
當表具有活動觸發器時,將 OUTPUT
子句與 UPDATE
語句一起使用會出現問題。 OUTPUT
子句需要一個目標(INTO
子句),這在存在觸發器的情況下並不總是可行。
解決方法:
最可靠的解決方案是在 OUTPUT
語句中省略 UPDATE
子句,並在更新完成後使用單獨的 SELECT
語句檢索更新的數據。
<code class="language-sql">-- Retrieve data before update (optional) SELECT BatchFileXml, ResponseFileXml, ProcessedDate FROM BatchReports WHERE BatchReports.BatchReportGUID = @someGuid; -- Update the table UPDATE BatchReports SET IsProcessed = 1 WHERE BatchReports.BatchReportGUID = @someGuid; -- Retrieve data after update SELECT BatchFileXml, ResponseFileXml, ProcessedDate FROM BatchReports WHERE BatchReports.BatchReportGUID = @someGuid;</code>
為什麼要避免使用觸發器進行輸出?
依靠 OUTPUT
子句獲取帶有觸發器的表中的“after”值是不可靠的。在這些條件下 OUTPUT
返回的數據可能不准確,導致潛在的數據不一致和應用程序錯誤。 更新後 SELECT
語句可確保您檢索正確的更新值。 這種方法保證了一致且可靠的結果。
以上是如何使用阻止使用 OUTPUT 子句的觸發器從表中檢索更新的資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!