-- ============================================= -- Author:<rachael> -- Create date: <2019-1-4> -- Description: <存儲過程說明> -- ============================================= ALTER PROCEDURE [dbo].[pSalaryPay_Upd_ConfirmSalaryPay] @CID NVARCHAR(100) = N'' --入參 AS BEGIN SET NOCOUNT ON; SET XACT_ABORT ON; --開啟產生運行時錯誤,整個事務將終止並回滾 --在TRY_CATCH塊之前,可以來定義變量。或者進行一些數據判斷 --TRY_CATCH塊。說明:TRY/CATCH都是成對出現的,有BEGIN就一定要有END。就像JAVA中的花括號 BEGIN TRY --對可能出現異常的處理,或者判斷。放在TRY_CATCH塊中。 --對臨時表的操作也可以在這里進行。在上面或者這里定義都可以。 --添加事務保證下面的行級鎖保持到事務的結束(ROWLOCK、XLOCK必須放在事務中) BEGIN TRANSACTION; --增、刪、改。對數據庫的操作在事務中。 --鎖會在事務結束后釋放。不管是回退還是提交。都會釋放。 --變動前鎖定指定數據。 SELECT * FROM DBO.TAB WITH(XLOCK,ROWLOCK,READPAST) --排他鎖,行級鎖,指明數據庫引擎返回結果時忽略加鎖的行或數據頁 WHERE ISDEL = 0 AND CID = @CID; --READPAST 說明:不會返回鎖定的記錄。這個語句的缺點是,其他操作不返回鎖定的記錄,只到事務釋放才會釋放鎖。 --鎖定后變更 UPDATE DBO.TAB SET ISDEL = 1 WHERE ISDEL = 0 AND CID = @CID; SELECT 0 AS ErrorCode,'確認成功' AS ErrorMsg; COMMIT TRANSACTION; END TRY BEGIN CATCH ROLLBACK TRANSACTION; --如果發生異常,且存在事務,則回滾。 SELECT 2 AS errorCode,'確認失敗' AS errorMsg; END CATCH END