sql server 存储过程,事务

1.存储过程,事务

CREATE PROCEDURE Proc_ceshi 
    @id int,
    @name varchar(50),
    @returnval int output 
AS
BEGIN
    SET NOCOUNT ON;
    Set XACT_ABORT ON;
    begin tran #ceshi
    begin try
        insert into dbo.table_ceshi (id,name) values (@id,@name);
        if(@@ERROR<>0) goto error;
        insert into dbo.table_ceshi (id,name) values (1,'fan');
        if(@@ERROR<>0) goto error;
    end try
    begin catch
        print('出错了');
        print(ERROR_LINE());
        print(ERROR_MESSAGE());
        goto error;
    end catch            
    success:
        print('success');
        set @returnval=1;
        commit tran #ceshi;
        goto exittran;
    error: 
        print('error');
        set @returnval=0;
        rollback tran #ceshi;
        goto exittran;
    exittran:
        print('exittran');
        return @returnval;
END
GO

调用方法:

declare @result int;
exec dbo.Proc_ceshi 2,'fan',@result output;
select @result;

解释说明:

SET NOCOUNT ON;----关闭受影响行数,在大数据时能提高性能。

Set XACT_ABORT ON;----ON时有错误的时候全部回滚;OFF时有错误时候,只是不提交错误语句,提交正确语句。

捕获错误的函数有很多,如下:

ERROR_NUMBER() 返回错误号。

ERROR_SEVERITY() 返回严重性。

ERROR_STATE() 返回错误状态号。

ERROR_PROCEDURE() 返回出现错误的存储过程或触发器的名称。

ERROR_LINE() 返回导致错误的例程中的行号。

ERROR_MESSAGE() 返回错误消息的完整文本。该文本可包括任何可替换参数所提供的值,如长度、对象名或时间。

欢迎指正:haizi2014@qq.com
原文地址:https://www.cnblogs.com/hcfan/p/5160207.html