帶有事務和錯誤處理的儲存過程

2021-08-03 11:20:12 字數 3079 閱讀 4796

1.建立錯誤日誌表

create

table [dbo].[t_errorlog](

[errorlogid] [int] identity(1,1) not

null,

[errortime] [datetime] not

null,

[username] [sysname] not

null,

[errornumber] [int] not

null,

[errorseverity] [int] null,

[errorstate] [int] null,

[errorprocedure] [nvarchar](126) null,

[errorline] [int] null,

[errormessage] [nvarchar](4000) not

null,

constraint [pk_errorlog_errorlogid] primary

key clustered

( [errorlogid] asc

)with (pad_index = off, statistics_norecompute = off, ignore_dup_key = off, allow_row_locks = on, allow_page_locks = on) on [primary]

) on [primary]

goalter

table [dbo].[t_errorlog] add

constraint [df_errorlog_errortime] default (getdate()) for [errortime]

go

2.建立寫入錯誤日誌的儲存過程
create

procedure [dbo].[error_logerror]

@errorlogid [int] = 0

output -- [t_errorlog]id

asbegin

set nocount on;

-- //錯誤資訊id

set @errorlogid = 0;

begin try

-- //判斷有沒有錯誤資訊

if error_number() is

null

return;

-- //return if inside an uncommittable transaction.

-- //data insertion/modification is not allowed when

-- //a transaction is in an uncommittable state.

if xact_state() = -1

begin

print '因為當前事務處於不可提交狀態所以不能記錄錯誤資訊。 '

+ '為了能夠成功記錄錯誤資訊,需要在執行error_logerror前回滾事務。';

return;

endinsert [dbo].[t_errorlog]

([username],

[errornumber],

[errorseverity],

[errorstate],

[errorprocedure],

[errorline],

[errormessage]

) values

(convert(sysname, current_user),

error_number(),

error_severity(),

error_state(),

error_procedure(),

error_line(),

error_message()

);set @errorlogid = @@identity;

end try

begin catch

execute error_printerror;

--//列印錯誤資訊的儲存過程

return -1;

end catch

end

3.建立列印錯誤資訊的儲存過程
create

procedure [dbo].[error_printerror]

asbegin

set nocount on;

-- print error information.

print 'error ' + convert(varchar(50), error_number()) +

', severity ' + convert(varchar(5), error_severity()) +

', state ' + convert(varchar(5), error_state()) +

', procedure ' + isnull(error_procedure(), '-') +

', line ' + convert(varchar(5), error_line());

print error_message();

end

4.建立自己的儲存過程
create

procedure procedure_name

asbegin

set nocount on;

begin try--//開始捕捉異常

begin tran--//開始事務

--//你的方法

commit tran --//提交事務

end try--//結束捕捉異常

begin catch--//有異常**獲

if @@trancount > 0--//判斷有沒有事務

begin

rollback tran--//回滾事務

enddeclare @errorlogid int ;

exec error_logerror @errorlogid output;--//執行儲存過程將錯誤資訊記錄在表當中

end catch--//結束異常處理

end

儲存過程 游標 錯誤處理(重新生成使用者編號)

set account data 重新生成使用者編號 begin declare temp id int 8 使用者id declare temp manager int 8 上級id declare temp accounter no varchar 64 上級編碼 declare temp ma...

SQL儲存過程和事務處理

在資料庫程式設計中,事務是經常需要用到的技術,在.net平台上,事務處理是非常好用的,但是在sql server資料庫的儲存過程中如何使用事務來完成資料的批量操作呢?解決方案如下 大概都是這樣處理的 create proc registeruser usrname varchar 30 usrpas...

關於ActionBar的使用和錯誤處理

actionbar是安卓3.0以後推出的,為了讓安卓應用的介面更加統一同時降低使用者的學習成本以及避免安卓使用者在使用中邏輯混亂。本人在學習的過程中參照郭霖大神的部落格 發現網上的解決辦法很亂,故寫下來幫助自己記憶整理。2.在2.x的版本中activity中通過getsupportactionbar...