4

我昨天问了这个问题时髦的删除问题

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

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

那么我该如何安全地:

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

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

4

1 回答 1

16

每当您针对生产数据执行未经验证的临时 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 什么,因为如果您忘记运行回滚或提交,然后去吃午饭或回家过周末,您可能会回来工作,看着您的粉色纸条。

于 2013-07-10T17:10:30.807 回答