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