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