У меня возникли проблемы с запуском моего триггера с несколькими записями, а также с if/else-логикой мне нужно провести тест перед вставкой записей.SQL Update Trigger with If Else logic with Multiple Rows
Моя цель состоит в том, чтобы позволить внешнему пользователю системы изменять тип события между значениями 1,2 и 3, но если они меняют его на тип события 1, то они должны ввести дату возникновения, иначе транзакция будет откат. Если они вводят дату наступления события, транзакция будет введена. Следующая логика работает для любой 1 записи, обновленной через интерфейс, но проблема в том, что при изменении нескольких писем через SQL я получаю ошибку:
«Msg 512, уровень 16, состояние 1, процедура TG_tbl_LE_Event_Occurence_Date_Validation, строка 9 Подзапрос вернулся более чем 1 значение. Это не допускается, когда подзапрос следует =,! =, <, < =,>,> = или когда вложенный запрос используется в качестве выражения. заявление было прекращено. "
Я знаю, что триггер можно переписать для учета нескольких записей, но я не могу найти способ его написать там, где тест 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
GO
Я не могу воссоздать вашу ошибку. Этот SQLFiddle (http://sqlfiddle.com/#!3/1b381/2), похоже, не делает тест COUNT (*) и добавляет нулевые даты, где event_type_id = 1. Желаю, чтобы я мог больше помочь - будет продолжать царапать мои глава. –
Здравствуйте, спасибо, что посмотрели. Здесь оператор if пытается выяснить, пытается ли пользователь изменить тип события на 1, но не смог ввести дату появления. Если это так, верните транзакцию и вызовите ошибку. Продолжайте обновлять записи/с. – user3780847