【问题标题】:SQL. Can not rollback transactionSQL。无法回滚事务
【发布时间】:2014-04-14 04:04:51
【问题描述】:

我尝试使用事务从表中删除几行。我使用了三次命令删除,其中两次正常,第三次包含错误。我想创建保存点并提交删除 2 个对象。但是我收到一个错误:当前事务无法提交,也无法回滚到保存点。回滚整个事务。这是我的代码:

BEGIN TRANSACTION
BEGIN TRY
DELETE FROM employee
WHERE ID = 101; --OK

DELETE FROM employee
WHERE Name = 'James'; --OK

SAVE TRANSACTION point_1;

DELETE FROM employee
WHERE ID = '11a'; --letters are not allowed
COMMIT TRANSACTION
END TRY
BEGIN CATCH
    ROLLBACK TRANSACTION point_1
    PRINT 'Error! Not all employees were deleted from database.'
END CATCH

谁能帮帮我?非常感谢!

我试过这样:

    BEGIN TRANSACTION
DELETE FROM employee
WHERE ID = 101;

DELETE FROM employee
WHERE Name = 'James';

SAVE TRANSACTION point_1;

BEGIN TRY
DELETE FROM employee
WHERE ID = '11a';
END TRY
BEGIN CATCH
    if XACT_STATE () = -1
        ROLLBACK TRANSACTION
    if XACT_STATE () = 1 and @@TRANCOUNT = 0
        ROLLBACK TRANSACTION
    if XACT_STATE () = 1 and @@TRANCOUNT > 0
        ROLLBACK TRANSACTION point_1
PRINT 'Error! Not all employees were deleted from database.'
END CATCH

这次没有错误,但是前两个对象没有被删除。我的错误在哪里?谢谢!

【问题讨论】:

标签: sql-server tsql ssms


【解决方案1】:

您可能在会话中有SET XACT_ABORT ON。如果您的代码在触发器内,则默认情况下此设置为 ON。

使用 SET XACT_ABORT OFF 试用您的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多