SQL Server是否可以报告受影响的行数不正确?

时间:2011-08-19 17:05:11

标签: sql sql-server-2008

我有一个实用程序:

  1. 从平面文本文件中获取sql命令
  2. 针对位于同一台计算机上的SQL Server顺序执行它们
  3. 并在UPDATE命令影响ZERO ROWS时报告错误(此文件中永远不应该有一个不影响记录的更新命令,因此将其记录为错误)
  4. 该实用程序还会记录任何失败的命令。

    然而,数据库中的最终数据似乎是错误/陈旧的,即使我的实用程序报告没有失败的更新且没有失败的命令。

    我知道第一个也是最明显的罪魁祸首是我对实用程序本身的编程中存在某种逻辑或运行时错误,但我只需要知道SQL Server可能会报告至少有一行受到影响并且但没有适用这种变化。

    如果有帮助,实用程序似乎总是正确执行相同数量的命令,并且最终的过时/错误数据总是相同的,即它似乎正确执行了一些成功查询数据库的命令,然后失败了。

    感谢。

    编辑:

    我还应该注意到,这个实用程序在4个不同的生产服务器上展示了这种行为,每个服务器都有自己专用的本地数据库服务器,而这些是具有8-16 GB RAM的强大机器,每个服务器由专业系统管理员管理。 / p>

2 个答案:

答案 0 :(得分:7)

根据你所说的......

如果你有一个触发器触发,“受影响的xx行”可能会产生误导。您可能正在从触发器读取计数。如果是这样,请将SET NOCOUNT ON添加到触发器

或者,数据是相同的,因此您实际上使用相同的值进行虚拟更新。例如,添加一个WHERE子句来测试差异。

答案 1 :(得分:4)

BEGIN TRANSACTION

UPDATE MyTable
SET Message = ''
WHERE ID = 2

ROLLBACK TRANSACTION

消息:

(1行受影响)