J'utilise des déclencheurs d'insertion/mise à jour pour mettre à jour la colonne Price
d'une deuxième table.Déclencheur de mise à jour avec GROUP BY
Le déclencheur d'insertion semble fonctionner parfaitement, mais lorsque je tente de changer un seul enregistrement dans SSMS, je reçois une erreur:
The row value(s) updated or deleted either do not make the row unique or they alter multiple rows(2 rows).
Ceci est ma mise à jour trigger:
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
Je dois regrouper par numéro de matériel parce qu'il y a des lignes redondantes insérées dans la table tabSparePartMasterData_Temp
que je n'utilise que pour mettre à jour le prix de pièce de rechange dans tabSparePart
. Mais j'ai supposé que le groupe par trierait les doublons (prix est identique pour tout doublon).
Il est possible que les enregistrements insérés/mis à jour 'MaterialNumber
ne soient pas disponibles dans tabSparepart
. Dans ce cas, cet enregistrement devrait être "ignoré". Est-ce que le INNER JOIN
en tient compte?
Ce qui génère le message d'erreur s'il vous plaît? Cela ne ressemble pas à SQL ... – gbn
Y at-il par hasard une contrainte unique sur '(tabSparePart.Price)' ou sur '(tabSparePart.SparePartName, tabSparePart.Price)'? S'il existe deux ou plusieurs «tabSparePart.SparePartName» identiques, votre mise à jour peut violer la contrainte, et c'est peut-être ce qui s'est réellement passé. –
@gbn: SQL-Server Management-Studio (SSMS) lorsque j'essaie de changer une valeur de prix dans la table avec le déclencheur. –