Триггер обновления не обновляет все строки в запросе обновления на основе набора - PullRequest
0 голосов
/ 09 октября 2018

У меня есть таблицы Города и Страны со следующими триггерами:

enter image description here

Когда я обновляю любой Город, он должен вставить строку в АудитТаблица с надписью "Город с идентификатором" любой идентификатор "был изменен".Таблица городов имеет связь по внешнему ключу с таблицей стран (Cities.CountryID = Страны.ID).

Что я ожидаю от trCountryUpdate, так это то, что когда я обновляю строку "Страна", она должна вставлять строку в таблицу аудита для всех городов с обновленным идентификатором страны.

Однако, когда я обновляю название страны с идентификатором 1, она должна была вставить 5 строк в таблицу аудита, поскольку для CountryID 1 есть 5 соответствующих городов. Однако всегда вставляется 1 строка.

Пожалуйста, дайте мне знать, что нужно сделать, чтобы вставить 5 строк в таблицу аудита для 5 городов с CountryID 1 при обновлении страны с ID 1.

PS:

ALTER trigger [dbo].[trCityUpdate]
on [dbo].[Cities]
for update
as

declare @cityIdModified int;
select @cityIdModified = ID from inserted;
Insert into Audit values ('The City with ID ' + cast(@cityIdModified as varchar(1)) + ' has been modified')

go

ALTER trigger [dbo].[trCountryUpdate]
on [dbo].[Countries]
for update
as

declare @countryIdModified int;
select @countryIdModified = ID from inserted;

update ci
set ci.CountryID = @countryIdModified
from Cities ci 
join Countries co on co.ID = ci.CountryID
where ci.CountryID = @countryIdModified

1 Ответ

0 голосов
/ 09 октября 2018

Спасибо за все ваши ответы.Это очень помогло:)

ALTER trigger [dbo].[trCityUpdate]
on [dbo].[Cities]
for update
as

Insert into Audit(Text)
select 'The City with ID ' + cast(ID as varchar(1)) + ' has been modified' 
from inserted

Когда обновляются 5 строк в таблице городов, trCityUpdate вызывается только один раз, , а не 5 раз .Вставленная таблица содержит 5 обновленных строк.

...