如果发生错误,是否会回滚此事务

时间:2016-02-17 02:35:56

标签: sql sql-server sql-server-2014

我有一个我想要提交的事务但不确定是否会在任何事情失败时回滚。我知道我可以在c#中使用TransactionScope,如果发生错误,所有内容都将被回滚。但我不太确定存储过程中的事务。所有在线示例都使用PasswordController关键字进行回滚。如果我没有ROLLBACK关键字那么会发生什么呢?

ROLLBACK

2 个答案:

答案 0 :(得分:6)

是的,如果事务未达到COMMIT声明,则会自动回滚。

这是一个简单的例子

样本表

create table tt(id int)

示例程序

CREATE PROCEDURE CreatePost
AS
BEGIN

    BEGIN TRANSACTION

    INSERT INTO tt values (1)

    select cast('ldfsfds' as int)

    COMMIT
END

执行程序并查询表

EXEC CreatePost    
select * from tt

结果

0 records

最终结果将是一个空表,假设在执行过程之前没有记录。

答案 1 :(得分:1)

存储过程在其自己的连接上下文中运行,并且在过程结束时连接将关闭。 由于您已明确启动事务,如果发生任何错误且代码未达到commit语句,它将自动回滚。