2011-08-15 11 views
1

私は、挿入/更新トリガを使用して2番目のテーブルの列Priceを更新しています。GROUP BYでトリガーを更新

挿入トリガーが完全に動作しているようですが、私はSSMSで単一のレコードを変更しようとすると、私はエラーを取得:

The row value(s) updated or deleted either do not make the row unique or they alter multiple rows(2 rows).

これは私の更新トリガーである:

CREATE TRIGGER [dbo].[trgUpdateMasterData] ON [dbo].[tabSparePartMasterData_Temp] 
AFTER UPDATE 
AS 

UPDATE tabSparePart 
SET  Price = MD.Price 
FROM tabSparePart INNER JOIN 
(
    SELECT  inserted.[Material Number (SAP)] AS MaterialNumber, inserted.Price 
    FROM   inserted 
    GROUP BY [Material Number (SAP)], inserted.Price 
) MD 
ON tabSparePart.SparePartName = MD.MaterialNumber 

私はマテリアル番号でグループ化する必要があります。tabSparePartのSparepart-Priceを更新するために使用しているテーブルtabSparePartMasterData_Tempに冗長な行が挿入されているためです。しかし、私はそのグループが複製物を並べ替えると仮定しました(複製物の価格は同じです)。

挿入/更新されたレコード 'MaterialNumbertabSparepartで利用できない可能性があります。この場合、このレコードはスキップする必要があります。 INNER JOINはそれを考慮していますか?このエラーは、SQLエラーのように見えていないと私はクライアントコードがトリガーで2番目にアップデートによって混乱している推測しているトリガー

SET NOCOUNT ONを追加

+0

エラーメッセージはどうなりますか?それはSQLのように見えません... – gbn

+0

'(tabSparePart.Price)'または '(tabSparePart.SparePartName、tabSparePart.Price)'に一意の制約がありますか?同じ 'tabSparePart.SparePartName'が2つ以上ある場合、あなたのアップデートは制約に違反する可能性があり、実際にはそれが起こったのかもしれません。 –

+0

@gbn:SQL Server Management Studio(SSMS)で、トリガーを使用してテーブルの価格の値を変更しようとしました。 –

答えて

5

してみてください。

編集:このエラーは、SSMSのデータグリッドビューがばかげているために発生する可能性があります。

私は思ったように、これは、SQLメッセージではありません:SSMS愚かなメッセージである

(ドットブログ未満)すべて

S SQL Server 2005のバグについてKB articleがあります。

+0

トリガーを「SET NOCOUNT ON」に変更しましたが、エラーは同じです。 「第2回の更新」とはどういう意味ですか?このトリガーに属するテーブルとは異なるテーブルを更新しています。 –

+0

@Tim Schmelter:異なるテーブルであってもここに* 2つの更新があります。一部のクライアントはこれによって混乱します。 http://stackoverflow.com/questions/1483732/set-nocount-on-usage – gbn

+0

あなたは正しいです。私はトリガーの先頭に 'NOCOUNT'を追加しましたが、' UPDATE'の直上に挿入する必要がありました。ありがとうございました。 –