Я новичок в триггерах SQL Server. Недавно я столкнулся с проблемой, что у меня есть две таблицы с именем tbl_Item
и tbl_changePrice
. Я хочу обновить tbl_Item
, когда tbl_changeprice
вставлен в новую строку. С этим новым именем строки данные о такой же дате будут обновляться в таблице tbl_item
.Как запускать триггер после каждой вставки таблицы sql server автоматически?
Вот мой триггер, что испытывается мной для обновления таблицы:
Alter TRIGGER trgAfterInsert ON [dbo].[tbl_changePrice]
After insert
AS
declare @itemname int;
declare @saleprice decimal(18,2);
declare @buyprice decimal(18,2);
select @itemname=i.name from inserted i;
select @saleprice=i.saleprice from inserted i;
select @buyprice=i.pprice from inserted i;
update tbl_Item set sellingPrice= @saleprice, buyingPrice= @buyprice where name= @itemname
PRINT 'AFTER INSERT trigger fired.'
GO
Ваш триггер ** MAJOR ** недостаток в том, что вы, кажется, предположить, что это будет называться ** один раз в строке ** - это ** не ** случай. Триггер будет срабатывать ** один раз за оператор **, поэтому, если ваши утверждения 'UPDATE' влияют на 25 строк, вы будете запускать триггер ** сразу **, но тогда' Inserted' и 'Deleted' будут содержать 25 строк , Какой из этих 25 строк будет выбран ваш код? 'select @ itemname = i.name из вставленного i;' - он не детерминирован. Для этого нужно переписать триггер! –