SQL Server Management Studio中的UPDATE
和DELETE
语句很容易出错。如果您在WHERE
条件中出错,可以轻松删除超出您想要的方式,或者更糟糕的是,如果您错误地编写一个始终为TRUE的表达式,则删除整个表。
无论如何都禁止在SQL Server Management Studio中影响大量行的查询?我知道MySQL Workbench中有这样的功能,但我在SQL Server Management Studio中找不到任何功能。
答案 0 :(得分:7)
没有
您有责任确保:
DELETE
/ UPDATE
语句。如果有疑问,请先发出SELECT *
或SELECT COUNT(*)
- 语句,以查看哪些记录会受到影响。答案 1 :(得分:1)
很多好评已经说过了。只是一个小小的补充:我已经创建了一个解决方案来禁止偶尔执行DELETE或UPDATE而没有任何WHERE条件。这是作为"致命行动守卫"在我的加载项SSMSBoost中。
答案 2 :(得分:1)
(我的评论变得相当笨重)
如果您不确定,一个简单的选项是BEGIN TRAN
,进行更新,如果rows affected
计数与预期明显不同,ROLLBACK
,否则,请进行一些检查,例如SELECTs
确保仅更新预期数据,然后COMMIT
。这里需要注意的是,这将锁定行,直到您提交/回滚为止,如果更新了大量行,则可能需要升级到TABLOCK
,因此您需要提前计划检查脚本。
那就是说,在任何半严重的系统中,没有人,甚至高级DBA都不应该在prod DB上执行直接的临时DML语句(也可以说是正式的UAT DB) - 这个被测试的应用程序是用于(或测试,验证的补丁脚本仅在考虑更改控制过程后执行)。
在不太正式的开发环境中,如果事情破裂真的很重要吗?事实上,如果你是Chaos Monkey的拥护者,从长远来看让青少年破坏你的数据可能是一件好事 - 它将确保你的流程重新编写脚本,迁移,静态数据部署,完整性检查都在订单好吗?
答案 3 :(得分:0)
我的建议是禁用自动提交。在审核后,您可以提交您的更改。并在结束会话之前提交它。
有关详细信息,请访问MSDN链接: