只有在更新前字段为假时,才会触发SQL Server触发器。

问题描述 投票:0回答:1

我在下面写了一个触发器,插入值,如果 emailstudio 列更新。这一列可以是0或1。

我如何编写触发器,使它只有在下面的 emailstudio 列从0变为1,而不是如果它已经是1?

谢谢你的建议

ALTER TRIGGER [dbo].[RM_Est_Email_Trigger]
ON  [dbo].[K3_BriefHeader] 
AFTER UPDATE
AS 
BEGIN
    SET NOCOUNT ON;

    DECLARE @estimate int, @Email_Date datetime, @status int, @emailstudio bit
    SET @estimate = (SELECT Estimate from inserted)
    set @Email_Date = GETDATE()
    SET @status = (SELECT Status from inserted)
    SET @emailstudio = (SELECT EmailStudio from inserted)

    IF UPDATE (EmailStudio)
    BEGIN
        INSERT INTO [dbo].[K3_EstimateEmailDate] ([Estimate], [Email_Date],[Status], [EmailStudio])
        VALUES (@estimate, @Email_Date, @status, @emailstudio)
    END
END
sql-server tsql database-trigger
1个回答
1
投票
Insert INTO [dbo].[K3_EstimateEmailDate] (
    [Estimate]
   ,[Email_Date]
   ,[Status]
   ,[EmailStudio]
)
SELECT Estimate
      ,GETDATE()
      ,status
      ,1
FROM inserted
     LEFT JOIN deleted
         ON deleted.<primarykey> = inserted.<primarykey>
WHERE inserted.emailstudio = 1
      AND (deleted.emailstudio is null -- inserted
           OR deleted.emailstudio = 0) -- updated 
© www.soinside.com 2019 - 2024. All rights reserved.