Transact SQL - 尝试执行插入时出错

时间:2016-05-15 12:28:22

标签: tsql triggers

所以我的问题是我尝试在名为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的其他表中的列,因为我需要通过四个表来到达它。

如果需要任何其他信息,请与我们联系。

提前致谢。

1 个答案:

答案 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

非常感谢你的帮助!