首页 > 解决方案 > SQL Server:AFTER INSERT 触发器无法正常工作,即使确保在 SSIS 包中设置了 FIRE_TRIGGERS

问题描述

不确定为什么这不能正常工作。让我给出一些我想要发生的事情的背景。

我正在向表中插入大量行OpenCase(大约 35 K)。该数据来自最近 3 个月。该Resolved Case表已经是最新的并且是最新的。

一些未解决的案例已经得到解决,所以我希望它检查插入表中的每一行并检查它SUB_QUERY_ID是否在Resolved Case表中。如果是,我想用这种情况下的表中的日期更新RESOLVED_ONOpen Case中的SUB_QUERY_CLOSED_ON日期Resolved Case

下面的一个例子:

Resolved Case表:

SUB_QUERY_ID   SUB_QUERY_CLOSED_ON
----------------------------------
US12332-1          1/28/2019

Open Case表:

SUB_QUERY_ID     RESOLVED_ON
-------------------------------------
US12332-1        (The trigger should get the SUB_QUERY_CLOSED_ON date from 
                  the Resolved Cases Table and update it here)

从我看到的示例中,这应该可以工作,但是RESOLVED_ON日期都是 NULL,即使我手动检查了一些Open Case SUB_QUERY_ID's 并看到它们在Resolved Case表中。

ALTER TRIGGER [FindResolvedCaseDate] 
ON [OpenCases]
AFTER INSERT, UPDATE
AS 
BEGIN
    IF @@ROWCOUNT = 0 
        RETURN

    SET NOCOUNT ON;

    DECLARE @SUB_QUERY_ID VARCHAR(150)

    SELECT @SUB_QUERY_ID = SUB_QUERY_ID 
    FROM INSERTED

    UPDATE OpenCases 
    SET RESOLVED_ON = (SELECT TOP 1 SUB_QUERY_CLOSED_ON 
                       FROM ResolvedCases  
                       WHERE SUB_QUERY_ID = @SUB_QUERY_ID 
                       ORDER BY SUB_QUERY_CLOSED_ON DESC)
END

标签: sql-servertriggers

解决方案


推荐阅读