您的位置:首页 > 数据库

Sql Server存储过程事务处理

2020-02-02 13:09 1006 查看
-- =============================================
-- 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

 

转载于:https://www.cnblogs.com/rachael/p/10095248.html

  • 点赞
  • 收藏
  • 分享
  • 文章举报
aiximi7001 发布了0 篇原创文章 · 获赞 0 · 访问量 67 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: