server sql 排它锁 begin tran

--在进行转换时,先要判断DISC_MAIN中是否存在已转纪录,如果有就只是修改记录的某些字段,如果没有就是新增一条记录
BEGIN TRY
BEGIN TRAN PK_SEQ_JL_TEXT --引用事务加排它锁防止出现主子表同步生成记录

if @DISC_ID is null -- 不存在已转纪录
BEGIN
-- 新增纪录生成DISC_ID
EXEC S139.PUBDB.DBO.GET_GUID @DISC_ID OUTPUT;
INSERT INTO TRAN_DP_C..PK_SEQ_JL_TEXT(Y_OB_TEXTID,DISC_ID,DTITLE,DDECLAREDATE)
SELECT @Y_OB_TEXTID_0042,@DISC_ID,@TITLE,@DECLAREDATE
END


else
begin

if @DISC_ID is not null and (@KEYIN is not null or @EDITNAME is not null or @COMMITNAME is not null) and @ISVALID=0
begin
return --- 1 人工编辑过,目的表无效,则不转入
end

INSERT INTO TRAN_DP_C..PK_SEQ_JL_TEXT(Y_OB_TEXTID,DISC_ID,DTITLE,DDECLAREDATE)
SELECT @Y_OB_TEXTID_0042,@DISC_ID,@TITLE,@DECLAREDATE
end

COMMIT TRAN PK_SEQ_JL_TEXT --事务提交,解锁
END TRY
BEGIN CATCH
SET @ERR_MSG=ERROR_MESSAGE()
ROLLBACK TRAN PK_SEQ_JL_TEXT --出错后回滚事务,解锁
RAISERROR(@ERR_MSG,16,1)
END CATCH

 

posted @ 2020-10-04 18:01  yongqi-911  阅读(367)  评论(0编辑  收藏  举报