【发布时间】:2016-05-15 12:28:22
【问题描述】:
所以我的问题是,在我的表上执行名为Contrat 的插入操作后出现以下错误
消息 512,级别 16,状态 1,过程 trig1,第 137 行。
子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。
我在表上设置了一个在插入后触发的触发器,当我禁用触发器时,插入工作完美。我环顾四周,发现'触发器没有被编程为处理多行返回',我仍然不知道如何解决这个问题。 这是触发器:
create trigger trig1
on Contrat
after insert
as begin
declare @contrat int, @total money
set @contrat = (select inserted.numcontrat from inserted)
set @total = (select inserted.prix_mensuel * 12 from inserted)
update Ville
set Ville.total_ville = (select Ville.total_ville + @total from Ville)
from Contrat C, Bien_immobilier B, Quartier Q, Ville V
where C.code_bien = B.code_bien and B.code_Quartier = Q.code_quartier and Q.code_ville = V.code_ville and C.numcontrat = @contrat
end
在Contrat 中插入一行后,触发器应该更新另一个名为Ville 的表中的列,因为我需要通过四个表才能到达它。
如果需要任何其他信息,请告诉我。
提前致谢。
【问题讨论】:
-
1) SQL Server 触发器按整个语句工作,而不是逐行工作。所以如果有多个插入,
set @contrat = (select inserted.numcontrat from inserted)将无法工作 2)from Contrat C, Bien_immobilier B, Quartier Q, Ville V使用JOIN而不是旧的逗号语法 3) 为什么set Ville.total_ville = (select Ville.total_ville + @total from Ville)?你想要set Ville.total_ville += @total吗? -
对于(3),是的,当在表
Contrat中插入一行时,表Ville中的total_ville行将被更新,其中@total将添加到其原值。