我有一个事务要提交,但不确定如果出现任何问题是否会回滚。我知道我可以在 c# 中使用 TransactionScope,如果发生错误,一切都将回滚。但是我不太确定存储过程中的事务。网上所有的例子都有一个回滚,使用ROLLBACK
关键字。如果我没有 ROLLBACK 关键字会怎样?
CREATE PROCEDURE CreatePost
@type INT,
@name VARCHAR(500)
AS
BEGIN
DECLARE @insertedId TABLE(Id INT)
DECLARE @id INT
BEGIN TRANSACTION
INSERT INTO [Post] ([Name], [Type])
OUTPUT inserted.Id INTO @insertedId
VALUES (@name, @type)
UPDATE [Tables] SET Ordinals =ordinals + 1
WHERE Id = @tableId
COMMIT
END
最佳答案
是的,如果事务没有到达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
假设在执行过程之前没有记录,最终结果将是一个空表。
关于sql - 如果发生错误,此事务是否会回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35446851/