我有一个要提交的事务,但不确定如果有任何事情失败,它是否会回滚。我知道我可以在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发布于 2016-02-17 11:15:06
是,如果事务未到达 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假设在执行过程之前没有记录,最终结果将是一个空表。
发布于 2016-02-17 11:18:43
存储过程在其自己的连接上下文中运行,该连接将在过程结束时关闭。因为您已经显式启动了一个事务,如果发生任何错误,并且代码没有到达commit语句,它将自动回滚。
https://stackoverflow.com/questions/35446851
复制相似问题