-- ============================================= -- 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