首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果发生错误,此事务是否会被回滚

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

Stack Overflow用户
提问于 2016-02-17 10:35:56
回答 2查看 165关注 0票数 2

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

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2016-02-17 11:15:06

是,如果事务未到达 COMMIT 语句,则会自动回滚。

下面是一个简单的例子

示例表

代码语言:javascript
复制
create table tt(id int)

示例过程

代码语言:javascript
复制
CREATE PROCEDURE CreatePost
AS
BEGIN

    BEGIN TRANSACTION

    INSERT INTO tt values (1)

    select cast('ldfsfds' as int)

    COMMIT
END

执行该过程并查询表

代码语言:javascript
复制
EXEC CreatePost    
select * from tt

结果

代码语言:javascript
复制
0 records

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

票数 6
EN

Stack Overflow用户

发布于 2016-02-17 11:18:43

存储过程在其自己的连接上下文中运行,该连接将在过程结束时关闭。因为您已经显式启动了一个事务,如果发生任何错误,并且代码没有到达commit语句,它将自动回滚。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35446851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档