Erreur en double dans les transactions

J'ai une transaction qui met à jour la table produit . Il définit un produit à fabriquer par une certaine machine . Cependant, si cette machine existe déjà dans le tableau, je reçois

Violation de la contrainte PRIMARY KEY 'produce_PK'. Impossible d'insert une key en double dans l'object 'dbo.TblProduces'.

Comment puis-je résoudre ce problème?

C'est la transaction:

create proc update_products_and_machine_proc @machinNum int, @productName varchar(10) as begin tran update_products_and_machine update TblProduces set machineNumber=@machinNum from TblProduces inner join TblMachine on TblMachine.machineNumber= TblProduces.machineNumber inner join TblProduct on TblProduces.productNumber= TblProduct.productNumber where TblProduct.productName=@productName and exists (select TblMachine.machineNumber from TblMachine where TblMachine.isWorking='true') if @@ERROR <> 0 begin rollback tran goto on_error end commit tran update_products_and_machine on_error: Print 'ERROR'; 

Vérifiez si MachineNumber existe avant d'essayer de mettre à jour. Vous pouvez utiliser EXISTS ou COUNT

Par exemple:

 DECLARE @Exists INT SELECT @Exists = COUNT(MachineNumber) FROM TblProduces WHERE MachineNumber = @machinNum IF @Exists = 0 BEGIN -- Perform UPDATE END