当涉及到SQL Server Management Studio中的UPDATE
和DELETE
语句时,很容易出错。如果在WHERE
条件中犯了错误,您可以很容易地删除远远超出所需数量的内容,或者更糟糕的是,如果您错误地编写了一个总是计算为TRUE的表达式,则可以删除整个表。
是否有任何方法可以禁止影响SQL Server Management Studio中的大量行的查询?我知道MySQL Workbench中有类似的功能,但我在SQL Server Management Studio中找不到任何功能。
发布于 2014-11-19 21:08:40
不是的。
您有责任确保:
DELETE
/UPDATE
语句。如果有疑问,请始终先发出SELECT *
或SELECT COUNT(*)
-statement,以查看哪些记录将被保存。不要依赖前端的一些愚蠢的功能,这些功能有时可能会拯救您,但在其他时间,这将完全毁了您。
发布于 2014-11-20 02:17:10
很多好的评论已经说过了。只有一个小小的补充:我已经创建了一个解决方案,禁止在没有任何WHERE条件的情况下偶尔执行DELETE或UPDATE。这在我的名为SSMSBoost的外接程序中被实现为“致命操作守卫”。
发布于 2014-11-20 02:46:16
(我的评论变得相当笨拙)
如果您不确定,一个简单的选择是BEGIN TRAN
,执行更新,如果rows affected
计数与预期的明显不同,执行ROLLBACK
,否则,执行一些检查,例如SELECTs
,以确保仅更新了预期的数据,然后执行COMMIT
。这里需要注意的是,这将锁定行,直到您提交/回滚,并且如果更新了大量行,则可能需要升级到TABLOCK
,因此您需要提前计划检查脚本。
也就是说,在任何半严肃的系统中,没有人,甚至是高级DBA,真的应该在prod DB (也可以说是正式的UAT DB )上执行直接的即席DML语句-这就是测试应用程序的目的(或者只有在考虑更改控制过程之后才执行的经过测试和验证的修补程序脚本)。
在不太正式的开发环境中,事情坏了真的很重要吗?事实上,如果你是Chaos Monkey的拥护者,从长远来看,让初级用户破坏你的数据可能是一件好事--这将确保你的流程重新编写脚本、迁移、静态数据部署、完整性检查都井然有序?
https://stackoverflow.com/questions/27016383
复制相似问题