每当我必须运行更新语句时,我总是担心我可能会忘记 WHERE 子句并覆盖数据库中的整个列。是否有任何设置或插件或附加组件可以让 SQL Server Management Studio 阻止某些危险语句,除非您明确表示可以运行?
我正在开发服务器上工作,所以我总是可以回滚更改,但是,我仍然觉得我可能只突出显示前两行,然后单击执行或执行其他愚蠢的操作。
在更新时创建一个触发器(另一个在删除时创建触发器可能是个好主意)。
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)
注意:这只能防止最明显的错误。请不要在生产服务器上使用它,因为您一定会找到一个语句,它会完全破坏您的表,但会通过这个简单的测试。此外,这在大型表上运行速度相当慢,性能会受到影响。
归档时间: |
|
查看次数: |
5712 次 |
最近记录: |