安全地删除sqlserver中的行,以便回滚提交



我昨天问了这个问题Funky Delete Issue

现在我想知道如何安全删除。

那么,我该如何使用提交和事务以及语法糖来覆盖我的@$$呢?因为昨天我愚蠢地删除了51000行。我有一个备份,但我仍然认为HOLY^%$#太容易了。

那么我该如何安全:

    DELETE FROM bBoxHeader
    WHERE bBoxHeader.bHeaderId <> '1099' 
    -- Ooops meant that to be equal. How do I roll back?

我如何包装它,这样我就不会吹走51000行

无论何时对生产数据执行未经验证的临时DML,都应该将其封装在BEGIN TRANSACTION中,并随后进行COMMIT和ROLLBACK。如果你在没有检查的情况下运行它,然后意识到你把它搞砸了,你可以把它回滚。否则你可以提交。

BEGIN TRANSACTION;
DELETE ... WHERE ...
-- COMMIT TRANSACTION;
---^^^^^^ if the number of rows affected is correct, highlight this & execute
-- ROLLBACK TRANSACTION;
---^^^^^^^^ otherwise highlight this and execute

请注意,这也可能导致你说"HOLY",因为如果你忘记运行回滚或提交,然后去吃午饭或周末回家,你可能会回来看你的解雇通知单。

最新更新