系统运维.数据异常.子单据头出现重复数据行问题排查

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

系统运维.数据异常.子单据头出现重复数据行问题排查

【应用场景】

子单据头出现重复数据行,原因不明。

正常情况下,同一个单据,子单据头也只会有一条数据。

目前已知的异常场景有:

<1>单据有人为在数据库删过数据,主表数据(单据头)被删了,但是从表数据(子单据头)未删干净,导致后期录单时,新数据会和旧的脏数据撞FID,导致虽然新增单据时只插入了一行子单据头数据,最后表现就是出现重复数据行。


【排查方法】

下面以销售出库单为例,进行演示。

<1>给子单据头表新增触发器,捕获到子单据头出现重复数据行时,抛数据库异常。

IF EXISTS(SELECT * FROM sys.objects WHERE name='tg_T_SAL_OUTSTOCKFIN_MultiRow' AND type='TR')
DROP TRIGGER tg_T_SAL_OUTSTOCKFIN_MultiRow
GO
CREATE TRIGGER tg_T_SAL_OUTSTOCKFIN_MultiRow
ON T_SAL_OUTSTOCKFIN
FOR INSERT,UPDATE
AS
BEGIN
    --定义变量
    DECLARE @FID INT,@FBILLNO NVARCHAR(50),@ERRORMSG NVARCHAR(500)
    --在inserted表中查询已经插入记录信息
    SELECT @FID=Inserted.FID FROM inserted
    IF @FID IS NOT NULL AND EXISTS(SELECT * FROM T_SAL_OUTSTOCKFIN WHERE FID=@FID)
    BEGIN
        SELECT @FBILLNO=ISNULL(FBILLNO,'') FROM T_SAL_OUTSTOCK WHERE FID=@FID
        SET @ERRORMSG=N'触发器异常=>相同单据的子单据头禁止创建多行!异常单据单号:'+@FBILLNO+'('+CAST(@FID AS nvarchar(20))+')'
        RAISERROR(@ERRORMSG,11,1)
    END
END
GO


<2>当异常代码往子单据头表插入重复数据时,会捕获以下异常。

---------------------------------------------------------------------------------------------------------













【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696



系统运维.数据异常.子单据头出现重复数据行问题排查

【应用场景】子单据头出现重复数据行,原因不明。正常情况下,同一个单据,子单据头也只会有一条数据。目前已知的异常场景有:<1>单据有人...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息