У меня есть триггер после вставки в Таблице 1, который будет вставлен в Таблицу 2, после того, как столбец обновления в таблице 1 обновится в Таблице 2 Status_Column, где Table1.id = table2.id, после удаления строки в таблице1 удалит строку в таблице2, где table1 .id = table2.id.Мой триггер не работает
create TRIGGER mytrigger
ON Table1
after UPDATE,INSERT,DELETE
AS
Begin
if update (columnA)
BEGIN
SET NOCOUNT ON;
declare @ID int
select @ID = ID from DELETED
UPDATE Table2
SET T2.Status_Column ='Updated'
From Table2 T2
inner join Table1 T1 on T1.ID = T2.ID
where T1.ID = @ID
End
else if exists (select * from inserted)
Begin
declare @table2_ID int
select @table2_ID = ID from inserted
insert into table2 (ID,Status_Column) values (@table2_ID,'New')
End
else if exists (select ID from deleted)
Begin
delete from table2
from table2 T2 , Deleted d
where t2.id= d.id
End
End
Только ВЕЬЕТЕ работает :(
«вставлены» и «удалены» являются таблицами, чтобы они могли представлять результаты операций набора. Проектирование триггера в предположении, что они всегда будут содержать ровно одну строку, как правило, плохой план. Если вы абсолютно уверены, что никогда не будет больше одной строки, добавьте проверку количества строк и используйте «RaIsError», чтобы явным образом сообщить тем, кто пришел позже, чтобы попытаться выполнить неприемлемое утверждение. ('if (выберите значение Count (*) из вставленного)> 1 RaIsError ('FooTable_Insert: обрабатывается не более одной строки.', 25, 42) с log') – HABO
Функция UPDATE() возвращает true как для INSERT, так и для UPDATE, поэтому вашей логике потребуется небольшая работа. – HABO
@HABO, что вы предлагаете для изменения этого триггера? – Interaoi