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

Luk*_*101 2 sql sql-server sql-server-2014

我有一个我想提交的事务,但不确定是否会在任何失败时回滚.我知道我可以在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
Run Code Online (Sandbox Code Playgroud)

sat*_*esh 6

是的,如果事务没有达到COMMIT声明,则事务会自动回滚.

这是一个简单的例子

样本表

create table tt(id int)
Run Code Online (Sandbox Code Playgroud)

样本程序

CREATE PROCEDURE CreatePost
AS
BEGIN

    BEGIN TRANSACTION

    INSERT INTO tt values (1)

    select cast('ldfsfds' as int)

    COMMIT
END
Run Code Online (Sandbox Code Playgroud)

执行该过程并查询该表

EXEC CreatePost    
select * from tt
Run Code Online (Sandbox Code Playgroud)

结果

0 records
Run Code Online (Sandbox Code Playgroud)

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