私は、挿入/更新トリガを使用して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
に冗長な行が挿入されているためです。しかし、私はそのグループが複製物を並べ替えると仮定しました(複製物の価格は同じです)。
挿入/更新されたレコード 'MaterialNumber
はtabSparepart
で利用できない可能性があります。この場合、このレコードはスキップする必要があります。 INNER JOIN
はそれを考慮していますか?このエラーは、SQLエラーのように見えていないと私はクライアントコードがトリガーで2番目にアップデートによって混乱している推測しているトリガー
にSET NOCOUNT ON
を追加
エラーメッセージはどうなりますか?それはSQLのように見えません... – gbn
'(tabSparePart.Price)'または '(tabSparePart.SparePartName、tabSparePart.Price)'に一意の制約がありますか?同じ 'tabSparePart.SparePartName'が2つ以上ある場合、あなたのアップデートは制約に違反する可能性があり、実際にはそれが起こったのかもしれません。 –
@gbn:SQL Server Management Studio(SSMS)で、トリガーを使用してテーブルの価格の値を変更しようとしました。 –