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

时间:2013-07-10 17:01:56

标签: sql-server-2008 tsql transactions

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

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

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

那我该怎么做呢?

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

如何包装,所以我不会吹掉51000行

1 个答案:

答案 0 :(得分:14)

每当您针对生产数据进行未经验证的临时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

请注意,这也可能导致你说什么,因为如果你忘记运行回滚或提交,然后去吃午餐或回家周末,你可能会回来看看你的粉红色单。