SQL Server: триггер AFTER INSERT не работает должным образом, даже после того, как убедитесь, что FIRE_TRIGGERS был установлен в пакете служб SSIS - PullRequest
0 голосов
/ 23 марта 2019

Не уверен, почему это не работает должным образом. Позвольте мне дать некоторый контекст того, что я хочу, чтобы произошло.

Я вставляю большое количество строк в таблицу OpenCase (около 35 K). Эти данные за последние 3 месяца. Таблица Resolved Case уже актуальна и актуальна.

Некоторые открытые случаи с тех пор были разрешены, поэтому я хочу проверить каждую строку из вставленной таблицы и проверить, находится ли это SUB_QUERY_ID в таблице Resolved Case. Если это так, я хочу обновить дату RESOLVED_ON в таблице Open 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 и вижу, что они в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...