当尝试执行包含 OUTPUT 子句的 UPDATE 查询时,可能会出现错误 334:“如果语句包含没有 INTO 子句的 OUTPUT 子句,则目标表不能有任何启用的触发器。” 此错误特别是在目标表上存在触发器时出现。
为了解决这个问题,请修改查询以在执行更新之前检索所需的值:
<code class="language-sql">SELECT BatchFileXml, ResponseFileXml, ProcessedDate FROM BatchReports WHERE BatchReports.BatchReportGUID = @someGuid UPDATE BatchReports SET IsProcessed = 1 WHERE BatchReports.BatchReportGUID = @someGuid</code>
这种方法避免了使用 OUTPUT 子句,从而减轻了触发器引起的兼容性问题。
将 OUTPUT 子句与触发器结合使用可能会导致数据检索不正确。具体来说,OUTPUT 子句根据行修改时的状态检索值,而不是在更新完成后检索值。这可能导致 OUTPUT 结果中的数据不正确或过期。
尝试使用中间 TABLE 变量来规避此问题也已被证明是徒劳的。不允许将时间戳插入表变量,即使使用 binary(8) 来表示时间戳,由于在更新完成之前检索值,返回的值也是不正确的。
以上是当触发器存在时如何处理带有 OUTPUT 子句的 UPDATE 查询?的详细内容。更多信息请关注PHP中文网其他相关文章!