0

我有带有以下触发器的城市和国家表:

在此处输入图像描述

当我更新任何城市时,它应该在审核表中插入一行,显示“ID 为“任何 ID”的城市已被修改”。Cities 表与 Country 表具有外键关系 (Cities.CountryID = Country.ID)。

我期望 trCountryUpdate 做的是,当我更新 Country 行时,它应该将行插入到具有更新 Country ID 的所有城市的 Audit 表中。

但是,当我用 ID 1 更新 Country 的名称时,它应该在 Audit 表中插入 5 行,因为 CountryID 1 有 5 个对应的 Cities。但是,它总是插入 1 行。

请让我知道当更新 ID 为 1 的国家/地区时,应该如何将 5 行插入到国家 ID 为 1 的 5 个城市的审计表中。

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
4

1 回答 1

0

感谢您的所有回复。这是一个很大的帮助:)

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

当 Cities 表中的 5 行被更新时, trCityUpdate 只被调用一次,而不是 5 次。插入的表包含 5 个更新的行。

于 2018-10-09T07:53:10.820 回答