DbVisualizer 8.0.12 执行两次更新而不是预期的一次更新
Posted
技术标签:
【中文标题】DbVisualizer 8.0.12 执行两次更新而不是预期的一次更新【英文标题】:DbVisualizer 8.0.12 performs two updates instead of expected one update 【发布时间】:2014-05-28 09:22:26 【问题描述】:我使用 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',因为我们在服务器上有很多 db,所以为了只跟踪我的名为 'my_db_name' 的数据库 2.'跟踪属性>事件选择>存储过程>启用SP:StmtStarting和SP:StmtCompleted',因为我想启用触发器跟踪
似乎来自 DBVisualizer 的这条信息具有误导性(这只发生在具有触发器的表中——在这种特殊情况下,触发器在每次更新时将数据插入到另一个表(所谓的存档表)中)。实际上,只完成了一次更新,所以一切都很好。 Microsoft SQL Server Management Studio 显示正确信息:1 次更新和 1 次插入。
希望这会帮助有类似“问题”的人。 @TomTom 请将您的评论作为答案,这样我就可以给您好评。谢谢你。
不过,关于 Profiler,我还想了解一件事。 有没有一种方法可以实际查看哪些行(在哪个表中)将被更新。 从我上面的信息中,我只能看到有一个更新(所以我假设它是 table1 上的这个更新,这是我所期望的)。但我想在此表中查看类似信息:'tablename' 此行:行列表将使用这些值或类似的内容进行更新... Profiler 可以做到这一点吗?
【问题讨论】:
考虑自己做一些工作。很明显,有 2 个命令问题。 FinTrace 它们 - 使用分析器 - 并检查它们是否是您认为的那样。 好的,谢谢@TomTom 的回复。您有任何推荐用于 MS SQL Server 数据库的分析器工具吗?还是我不知道的 db 或 DBVisualizer 附带的东西? 嗯,它是 SQL SERVER 附带的东西。为什么忽略你已经拥有的所有工具...... 我没有忽略它,我只是没有意识到它,因为我以前没有使用它。此外,谷歌搜索它,我注意到 msdn 说他们将来会弃用它。我不明白你为什么用这种居高临下的语气?你想帮忙还是玩聪明? 通过阅读文档,对不想学习他们做什么的人采取零容忍政策。就这么简单。 【参考方案1】:考虑自己做一些工作。很明显有两个命令问题。拳头追踪它们 - 使用分析器 - 并检查它们是否是您认为的那样。
SQL Server 带有一个开箱即用的体面分析器。当你做这样的事情时的旧规则:永远不要假设,总是验证。这些陈述甚至可能不一样......只要你不知道......一切都是一个愚蠢的猜测。
【讨论】:
这里有一些公然居高临下的东西:哇!不可思议,这是什么名利场……想一想……【参考方案2】:正如@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 Server 包含分析器,DAAAH ...” 没有你自己的建设性建议,而且有很多“聪明”的人)。 问题的答案应该包括一些更有用的信息和具体的指导(如果有的话),否则,不要做一个聪明人。 由于我在没有您帮助的情况下完成了所有工作,因此我认为您实际上不值得称赞。 有趣的是,您实际上认为自己做到了。 对暂无评论,但我真的有ZERO(0.000000000000000000000>是否要改变,嗯,让见... 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ......好吧,我不这样想>这是自作聪明的给你一点点:)容忍政治像你这样的聪明人。 [编辑结束]
不过,关于 Profiler,我还想了解一件事。 有没有一种方法可以实际查看哪些行(在哪个表中)将被更新。 从我上面的信息中,我只能看到有一个更新(所以我假设它是 table1 上的这个,这是我预期的)。但我想在这个表中看到类似的信息:'tablename'这个行:行列表将使用这些值或类似的东西更新...... 探查器可以做到这一点吗? 提前感谢您的时间和回答。
【讨论】:
以上是关于DbVisualizer 8.0.12 执行两次更新而不是预期的一次更新的主要内容,如果未能解决你的问题,请参考以下文章