我有带有以下触发器的城市和国家/地区表:
当我更新任何城市时,它应在“审计”表中插入一行,说明“ ID为'any ID'的城市已被修改”。城市表与国家表具有外键关系(Cities.CountryID = Country.ID)。
我期望trCountryUpdate做的是,当我更新“国家/地区”行时,对于所有具有更新的国家/地区ID的城市,它都应在“审计”表中插入行。
但是,当我更新ID为1的Country的名称时,它应该已经在Audit表中插入了5行,因为CountryID 1有5个对应的城市。但是,它总是插入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
答案 0 :(得分: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
更新“城市”表中的5行时,只会调用一次trCityUpdate,而不是5次。插入的表包含5个更新的行。