儲存過程中實現事務並新增異常捕獲

2021-09-24 10:14:55 字數 1338 閱讀 7193

-- 儲存過程:異常獲取、事務

alter procedure [proc]

@param nvarchar(100) = n''

asbegin

set nocount on;

--開啟產生執行時錯誤,整個事務將終止並回滾,預設off(隨機,可能繼續執行,也可能終止執行)

set xact_abort on; 

--try_catch

begin try

--新增事務,保證下面的行級鎖保持到事務的結束(rowlock、xlock必須放在事務中)

begin transaction;

--增、刪、改。對資料庫的操作在事務中。

--鎖會在事務結束後釋放。不管是回退還是提交。都會釋放。

--變動前鎖定指定資料。

--排他鎖,行級鎖,指明資料庫引擎返回結果時忽略加鎖的行或資料頁

--readpast :不會返回鎖定的記錄。這個語句的缺點是,其他操作不返回鎖定的記錄,只到事務釋放才會釋放鎖。       

select *                    

from table

with(xlock,rowlock,readpast) 

where isdel = 0

and cid = @cid;

--鎖定後變更

update dbo.tab

set isdel = 1

where id = @param;

commit transaction;

end try

begin catch

--如果發生異常,且存在事務,則回滾。

rollback transaction;

--丟擲異常

declare @errormessage nvarchar(4000);

declare @errorseverity int;

declare @errorstate int;

select

@errormessage = error_message(),

@errorseverity = error_severity(),

@errorstate = error_state();

raiserror (@errormessage, -- message text.

@errorseverity, -- severity.

@errorstate -- state.

);end catch

set xact_abort off;

set nocount off;

end

在儲存過程中實現事務

在圖書館管理系統中系統管理員可以進行的操作有 借 還 新增 刪除 修改圖書或新增 刪除 修改讀者等,很多的操作都涉及到多個表的進行,我們一定要保持資料的一致性。如 刪除讀者 操作,會在讀者表 reader 中進行讀者的刪除,該讀者刪除後,借書表 reader book 也沒有必要再保留該讀者的借書記...

儲存過程中事務操作

資料庫中事務主要應用在多條語句的更新操作 插入 修改 刪除 可以保證資料的完整性與正確性。使用原則為盡可能少的影響資料,以免產生死鎖或者占用資源。在儲存過程中如果中間操作有非嚴重的錯誤資訊執行不會中斷,會繼續執行並返回相應結果。但是程式呼叫的話如果不是用 try catch形式則會報錯,出現黃頁。需...

儲存過程中的事務實現 轉貼

基本上方法有兩個 set xact abort 指定當 transact sql 語句產生執行時錯誤時,microsoft sql server 是否自動回滾當前事務。語法set xact abort 注釋當 set xact abort 為 on 時,如果 transact sql 語句產生執行 ...