2011-08-19 32 views
1

我有一个工具,它:SQL Server是否可能报告受影响的行数不正确?

  1. 抓住SQL命令从一个纯文本文件
  2. 将同时执行这对位于同一台机器
  3. 上的SQL Server,如果一个UPDATE命令影响零行报告错误(在这个文件中永远不应该有一个不影响记录的更新命令,因此它被记录为错误)

该实用程序还记录任何失败的命令。

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

我知道第一个也是最明显的罪魁祸首是我在编程实用程序本身时出现了某种逻辑或运行时错误,但我只需要知道它是THEORETICALLY有可能报告至少有一行是受影响但尚未适用变更。

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

谢谢。

编辑:

我也应该注意到,这种效用展出跨越4个不同生产的每一个服务器这种行为有自己专用的本地数据库服务器,而这些都是仡机器与每一个都是8-16 GB RAM由专业系统管理员管理。

+2

AFAIK,没有。听起来像一个实用程序逻辑问题。 –

+2

SQL Server有可能更新数据中实际没有更改的行。例如,设置列值等于其当前值。表格上的触发器也会影响修改了多少行。 – Yuck

+1

你在哪里检查@@ ROWCOUNT?您可以运行分析器来查看在更新命令和@@ ROWCOUNT检查之间是否发布了任何语句(包括那些可能来自触发器或发送更新命令的程序)。它发生在多个服务器上的事实无疑增加了“逻辑问题”论证的重要性。 –

回答

7

根据你说什么......

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

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

+0

我们的数据库管理员说我们的服务器中没有数据库触发器,而且我已经重复检查过,所以不能这样做。谢谢你的想法。 –

+0

@ user808532:好吧,我认为你的逻辑/工具是错误的。不要浪费时间寻找SQL Server cuplprit – gbn

+0

这也是我的想法。 –

4
BEGIN TRANSACTION 

UPDATE MyTable 
SET Message = '' 
WHERE ID = 2 

ROLLBACK TRANSACTION 

消息:

(1行(一个或多个)受影响)

+0

+1简单辉煌 – gbn

+0

太棒了,每天都会学到新的东西。不幸的是,我只查看了700,000+的命令文件,没有一个回滚,所以这不可能。 –

+0

“我只需要知道它是理论上可能的SQL服务器报告至少有一行受到影响,但没有应用更改。”问题回答了。如果你想要一个不同的问题的答案,你必须问这个问题。 –

相关问题