2016-05-15 12 views
0

を実行しようとすると、だから私の問題は、私はContratのTransact SQL - エラー挿入

メッセージ512、レベル16、状態1と呼ばれる私のテーブルの上に挿入を実行しようとした後、次のエラーを取得するということですプロシージャtrig1、行137。

サブクエリが1より大きい値を返しました。 =、!=、<、< =、>、> =、またはサブクエリが式として使用されている場合は、これは許可されません。

私はトリガを無効にすると、挿入後にトリガされるテーブルにトリガが設定されているため、挿入が完全に機能します。私は周りを見回し、 'トリガーは複数の行のリターンを処理するようにプログラムされていません'、私はまだisueを解決する方法を見つけることができないことがわかりました。 これはトリガーです:

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という名前の別のテーブルに列を更新することになっている、そのために私はそれに到達するために4つのテーブルを通過する必要があります。

追加情報が必要な場合はお知らせください。

ありがとうございます。

+0

1)SQL Serverは、行単位ではなく文全体で動作します。したがって、コンマC、Bien_immobilier B、Quartier Q、Ville Vで古いコンマ構文の代わりに 'JOIN'を使用すると、2)' '@contrat =(insert.numcontratを挿入しました)なぜ 'set Ville.total_ville =(Ville.total_ville + @totalをVilleから選んでください)'? ** 'set Ville.total_ville + = @ total' **をお望みですか? – lad2025

+0

(3)の場合、 'Contrat'テーブルに行が挿入されると' Ville'テーブルの 'total_ville'行が更新され、' @ total'が元の値に追加されます。 – Angelo

答えて

0

問題が解決しました。

どうやら、問題は、この行とあった:それがなかったので、何 set Ville.total_ville = (select Ville.total_ville + @total from Ville)

がアップデート適用されていない状態フィルタが存在しないため、テーブルを返す(select Ville.total_ville + @total from Ville)クエリからテーブル全体を持つ列Ville.total_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 

はあなたの助けをありがとうございました!