1

我使用 DbVisualizer 8.0.12 作为 MS SQL Server 2012 数据库的客户端工具。
我想执行简单的更新:

update table1 set field1=0 where filed2='something';

我希望恰好更新一行,因为 field2 是 table1 的主键。
另外,做一个:

select * from table1 where field2='something';

正好返回一行。

但是在执行更新 sql 时,DBVisualizer 通知我成功执行了两次更新。

11:16:58  [UPDATE - 1 row(s), 0.003 secs]  Command processed
11:16:58  [UPDATE - 1 row(s), 0.003 secs]  Command processed
... 2 statement(s) executed, 2 row(s) affected, exec/fetch time: 0.006/0.000 sec  [2 successful, 0 warnings, 0 errors]

我不明白为什么要执行两次更新?不应该只有一个更新吗?
有人可以请教吗?预先感谢您提供任何信息。

[编辑]
正如@TomTom 建议的那样,我使用了 MS SQL Server 分析器。
我还使用 Microsoft SQL Server Management Studio 运行了我的 SQL 更新。

我必须为探查器(以及我的需要)打开的东西是:
1.'跟踪属性>事件选择>列过滤器>数据库名称 - 像:my_db_name',因为我们在服务器上有很多数据库,所以在为了只跟踪名为“my_db_name”的数据库
2.“跟踪属性 > 事件选择 > 存储过程 > 启用 SP:StmtStarting 和 SP:StmtCompleted”,因为我想启用触发器跟踪

似乎来自 DBVisualizer 的此信息消息具有误导性(这只发生在具有触发器的表中——在这种特殊情况下,触发器在每次更新时将数据插入另一个表(所谓的存档表))。实际上,只完成了一次更新,所以一切都很好。
Microsoft SQL Server Management Studio 显示正确信息:1 次更新和 1 次插入。

希望这会帮助有类似“问题”的人。@TomTom 请将您的评论作为答案,这样我就可以给您好评。谢谢你。

不过,关于 Profiler,我还想了解一件事。
有没有一种方法可以实际查看哪些行(在哪个表中)将被更新。
从我上面的信息中,我只能看到有一个更新(所以我假设它是 table1 上的这个更新,这是我所期望的)。但我想在这个表中看到类似的信息:'tablename'这个行:行列表将使用这些值或类似的东西进行更新......
这可以用探查器吗?

4

2 回答 2

0

考虑自己做一些工作。很明显有两个命令问题。拳头追踪它们 - 使用分析器 - 并检查它们是否是您认为的那样。

SQL Server 带有一个开箱即用的体面分析器。当你做这样的事情时的旧规则:永远不要假设,总是验证。这些陈述甚至可能不一样......只要你不知道......一切都是一个愚蠢的猜测。

于 2014-05-28T14:56:02.737 回答
0

正如@TomTom 建议的那样,我使用了 MS SQL Server 分析器。我还使用 Microsoft SQL Server Management Studio 运行了我的 SQL 更新。

我必须为探查器(以及我的需要)打开的东西是:1.'跟踪属性>事件选择>列过滤器>数据库名称 - 像:my_db_name',因为我们在服务器上有很多数据库,所以在为了只跟踪名为“my_db_name”的数据库 2.“跟踪属性 > 事件选择 > 存储过程 > 启用 SP:StmtStarting 和 SP:StmtCompleted”,因为我想启用触发器跟踪

似乎来自 DBVisualizer 的此信息消息具有误导性(这只发生在具有触发器的表中——在这种特殊情况下,触发器在每次更新时将数据插入另一个表(所谓的存档表))。实际上,只完成了一次更新,所以一切都很好。Microsoft SQL Server Management Studio 显示正确信息:1 次更新和 1 次插入。

希望这会帮助有类似“问题”的人。@TomTom 请将您的评论作为答案,这样我就可以给您好评。谢谢你。
[编辑]
@TomTom
嗯,也许不是。
我认为你有足够的时间考虑它......
你的回答根本没有帮助(除了确认形式的小光迹:
“是的,SQL 服务器包含分析器,DAAAH......”
没有你自己的建设性建议和很多“聪明”的人)。
一个问题的答案应该包括一些更有用的信息和具体的指导(如果你有的话),否则就别傻了。
由于我在没有您帮助的情况下完成了所有工作,因此我认为您实际上不值得称赞。
有趣的是,你实际上认为你这样做了。
没有评论,除​​了我真的零(0.00000000000000000000000>是否要改变,嗯,让我们看... 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,0000,0000000 ...像你这样的聪明人。
[编辑结束]

不过,关于 Profiler,我还想了解一件事。有没有一种方法可以实际查看哪些行(在哪个表中)将被更新。从我上面的信息中,我只能看到有一个更新(所以我假设它是 table1 上的这个更新,这是我所期望的)。但是我想在这个表中看到类似的信息:'tablename'这个行:行列表将使用这些值或类似的东西进行更新......这可以用探查器吗?提前感谢您的时间和回答。

于 2014-08-27T18:20:19.727 回答