SQL Server触发器中的条件检查

时间:2019-04-13 16:29:52

标签: sql sql-server

我创建了一个触发器,用于根据已插入T2的内容向T1插入一些值。这用于通过监视Status的值和两个不同状态值之间的报告中的日期差异来审核过程花费了多长时间。

如果i.IdNumber表中存在i.statustblEX1StatusChangeLog并没有执行任何操作,则我缺少要包含条件的位置。

任何帮助将不胜感激,并在此先感谢。

我的问题是,无论如何,如果相关对象被修改,我会看到重复的状态值和IdNumber,其中对于每个ID号,它们应该仅是唯一状态。我知道我可以对报告中的数据进行按摩以提供所需的结果,即使有重复项也可以,但是我想最小化进入changelog表的数据。

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 :(得分:0)

您可以使用numeach

not exists