SQL Update Trigger with If Else逻辑与多行



我在让我的触发器与多个记录一起工作时遇到了麻烦,同时还包含我需要在插入记录之前进行测试的if/else逻辑。

我在这里的目标是使系统的前端用户能够在值1、2和3之间更改事件类型,但是如果他们将其更改为事件类型1,那么他们必须输入发生日期,否则事务将回滚。如果他们确实输入了发生日期,那么交易将被输入。下面的逻辑适用于通过前端更新的任何1条记录,但问题是,当通过SQL编写多个更改时,我收到错误:

"Msg 512,级别16,状态1,过程TG_tbl_LE_Event_Occurence_Date_Validation,第9行子查询返回多个值。当子查询紧跟在=、!=、<、<=、>、>=之后,或者子查询用作表达式时,不允许这样做。语句已被终止。"

我知道触发器可以重写以解释多个记录,但我找不到一种方法来编写If Else测试仍然起作用的地方。

ALTER TRIGGER [dbo].[TG_tbl_LE_Event_Occurence_Date_Validation]
    ON [dbo].[tbl_LE_Event]
    AFTER update
AS
DECLARE @InsertID int
SET @InsertID = (Select Event_ID from Inserted)
IF (
    SELECT COUNT(*)
FROM inserted
WHERE inserted.Occurence_Date is null and inserted.Event_Type_ID = 1) > 0
BEGIN 
    ROLLBACK TRAN
    RAISERROR('#####OCCURENCE DATE IS A REQUIRED FIELD FOR TYPE 1 EVENTS. PLEASE ENTER AN OCCURENCE DATE OR THIS CHANGE WILL NOT BE SAVED#####',10,1)
END ELSE 
    UPDATE dbo.tbl_LE_Event
    SET dbo.tbl_LE_Event.Event_Type_ID = Inserted.event_type_ID,
        dbo.tbl_LE_Event.Occurence_Date = Inserted.Occurence_Date
    FROM inserted  
    JOIN dbo.tbl_LE_Event ON dbo.tbl_LE_Event.Event_ID = @InsertID

我能够解决多个记录发生的错误。似乎代码不喜欢使用变量的ID,我包括以下修订:

CREATE TRIGGER [dbo].[TG_tbl_LE_Event_Occurence_Date_Validation]
  ON [dbo].[tbl_LE_Event]
  AFTER update
  AS
     IF (SELECT count (*)FROM inserted
         WHERE inserted.Occurence_Date is null and inserted.Event_Type_ID = 1) >0
               BEGIN 
                rollback tran
                raiserror('#####OCCURENCE DATE IS A REQUIRED FIELD FOR LOSS EVENTS. PLEASE ENTER AN OCCURENCE DATE OR THIS CHANGE WILL NOT BE SAVED#####',10,1)
               END
     ELSE update dbo.tbl_LE_Event
        SET dbo.tbl_LE_Event.Event_Type_ID = Inserted.event_type_ID,
        dbo.tbl_LE_Event.Occurence_Date = Inserted.Occurence_Date
        from inserted join dbo.tbl_LE_Event on dbo.tbl_LE_Event.Event_ID = inserted.Event_ID

GO

相关内容

  • 没有找到相关文章

最新更新