限制SQL Server Management Studio中更新/删除的行数

时间:2014-11-19 12:04:40

标签: sql-server tsql ssms

SQL Server Management Studio中的UPDATEDELETE语句很容易出错。如果您在WHERE条件中出错,可以轻松删除超出您想要的方式,或者更糟糕的是,如果您错误地编写一个始终为TRUE的表达式,则删除整个表。

无论如何都禁止在SQL Server Management Studio中影响大量行的查询?我知道MySQL Workbench中有这样的功能,但我在SQL Server Management Studio中找不到任何功能。

4 个答案:

答案 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链接:

http://msdn.microsoft.com/en-us/library/ms187807.aspx