-- 儲存過程:異常獲取、事務
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 語句產生執行 ...