我正在尝试找到一种在执行后回滚事务的方法。

例如:

DECLARE @tsubaki VARCHAR(25);
SET @tsubaki = 'A Transaction';

BEGIN TRANSACTION @tsubaki
UPDATE dbo.Maka SET id = 400, name = 'inu' --notice I didn't put there where clause
COMMIT TRANSACTION

后来我意识到我更新了数据库Maka中的所有内容,而不仅仅是我原本打算的一条记录。

现在,我尝试编写代码以在更新之前将其回滚:
DECLARE @tsubaki VARCHAR(25);
SET @tsubaki = 'A Transaction';
ROLLBACK TRANSACTION @tsubaki;

不起作用底线:我正在寻找一种在事务已提交且sql已运行之后在MS-SQL Server 2008中回滚sql事务的方法。

提前致谢。

最佳答案

您不能从T-SQL代码中做到这一点。您将必须从日志文件中restore to a point in time。请注意,还原会将所有内容“撤消”到某个时间点,包括您的事务。

将来,无论大小,您都应该始终备份数据库。您也可以使用一些小技巧来掩饰自己。像这样写出您的更新/删除代码:

SELECT * FROM dbo.Maka
-- UPDATE dbo.Maka SET id = 400, name = 'inu'
WHERE some_identifier = some_value

首先运行无害的SELECT版本,当您可以验证要更新的记录时,请从WHERE子句中选择代码,然后运行UPDATE。

09-28 14:42