SQL Server 能否阻止我运行不带 WHERE 子句的 UPDATE 语句?

5 sql-server ssms

每当我必须运行更新语句时,我总是担心我可能会忘记 WHERE 子句并覆盖数据库中的整个列。是否有任何设置或插件或附加组件可以让 SQL Server Management Studio 阻止某些危险语句,除非您明确表示可以运行?

我正在开发服务器上工作,所以我总是可以回滚更改,但是,我仍然觉得我可能只突出显示前两行,然后单击执行或执行其他愚蠢的操作。

Chr*_*s S 4

在更新时创建一个触发器(另一个在删除时创建触发器可能是个好主意)。

CREATE TRIGGER [Table].[uPreventUpdateOops] 
ON [Table]
FOR UPDATE AS 
BEGIN
     DECLARE @Count int
     SET @Count = @@ROWCOUNT;

     IF @Count >= (SELECT SUM(row_count)
         FROM sys.dm_db_partition_stats 
         WHERE OBJECT_ID = OBJECT_ID('Table') 
         AND index_id = 1)
     BEGIN
         RAISERROR('Cannot update all rows',16,1) 
         ROLLBACK TRANSACTION
         RETURN;
     END
END
GO
Run Code Online (Sandbox Code Playgroud)

注意:这只能防止最明显的错误。请不要在生产服务器上使用它,因为您一定会找到一个语句,它会完全破坏您的表,但会通过这个简单的测试。此外,这在大型表上运行速度相当慢,性能会受到影响。