Проверка состояния в триггере SQL Server - PullRequest
1 голос
/ 13 апреля 2019

Я создал триггер для вставки некоторых значений в T2 на основе того, что было вставлено в T1.Это используется для проверки того, сколько времени занимает процесс, путем отслеживания значения Status и разницы дат в отчете между двумя различными значениями состояния.

Мне не хватает места для включения условия, если i.IdNumber и i.status существуют в таблице tblEX1StatusChangeLog, которые ничего не делают.

Любая помощь будет высоко ценится, и заранее спасибо.

Моя проблема в том, что если связанный объект в любом случае изменен, я вижу повторяющиеся значения статуса и IdNumber, где они должны иметь уникальный статус только для каждого из идентификационных номеров.Я знаю, что могу обработать данные в отчете, чтобы получить желаемые результаты даже с дубликатами, однако я хочу минимизировать данные, попадающие в таблицу изменений.

create trigger trgEx1StatusChange 
on tblEx1 
after update, insert    
as 
begin
    insert into tblEx1StatusChangeLog (IdNumber, UpdatedOn, Status, updatedby)
        select i.IdNumber, GETDATE(), i.Status, SUSER_NAME()
        from tblQuotes as t
        inner join inserted as i on t.IdNumber = i.IdNumber
end 

Я хотел бы увидеть эти результаты

IdNumber   UpdatedOn    Status    UpdatedBy
----------------------------------------------
100001     04102019     Open      domain/user
100001     04132019     Closed    domain/user

Не

IdNumber   UpdatedOn    Status    UpdatedBy
----------------------------------------------
100001     04102019     Open      domain/user
100001     04102019     Open      domain/user (if the object related to idNumber-100001 is edited but status is not changed)
100001     04132019     Closed    domain/user

1 Ответ

0 голосов
/ 13 апреля 2019

Вы можете использовать not exists:

create trigger trgEx1StatusChange on tblEx1 after update, insert    
as 
begin
    insert into tblEx1StatusChangeLog (IdNumber, UpdatedOn, Status, updatedby)
        select i.IdNumber, GETDATE(), i.Status, SUSER_NAME()
        from tblQuotes t join
             inserted i
             on t.IdNumber = i.IdNumber
        where not exists (select 1
                          from tblEX1StatusChangeLog cl2
                          where cl2.IdNumber = i.IdNumber and
                                cl2.Status = i.status
                         );
end ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...