所以我的问题是我尝试在名为Contrat
的表上执行插入后出现以下错误
Msg 512,Level 16,State 1,Procedure trig1,Line 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
触发器应该在Ville
中插入行后更新名为Contrat
的其他表中的列,因为我需要通过四个表来到达它。
如果需要任何其他信息,请与我们联系。
提前致谢。
答案 0 :(得分:0)
问题解决了!
显然,问题在于这一行:
set Ville.total_ville = (select Ville.total_ville + @total from Ville)
所以它做的是用整个表更新列Ville.total_ville
,因为查询(select Ville.total_ville + @total from Ville)
返回一个表,因为没有应用条件过滤器。
要修复它,这就是我所做的:
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 = Ville.total_ville + @total
from Contrat C, Bien_immobilier B, Quartier Q
where C.code_bien = B.code_bien and B.code_Quartier = Q.code_quartier and Q.code_ville = Ville.code_ville and C.numcontrat = @contrat
end
非常感谢你的帮助!