我有一個交易,更新表產生。它設定產品由某個機器製造。然而,如果這機表中已經存在,我得到PRIMARY KEY約束「produces_PK」的交易中的重複錯誤
衝突。不能在對象'dbo.TblProduces'中插入 重複鍵。
我該如何解決這個問題?
這是交易:
create proc update_products_and_machine_proc @machinNum int, @productName varchar(10) as
begin tran update_products_and_machine
update TblProduces set [email protected]
from TblProduces inner join TblMachine on TblMachine.machineNumber=
TblProduces.machineNumber inner join TblProduct on TblProduces.productNumber=
TblProduct.productNumber
where [email protected] 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';
什麼是TblProduces的主鍵?你的'存在'子查詢只是檢查是否有任何工作機器,是否正確? –
Produces是「Product」和「Machine」之間的連接表,因此productnumber和machinenumber是主鍵,並且是「produce」表中唯一的字段。此外,您正確 – user2023203
此查詢是否嘗試將給定產品的所有machineNumbers更新爲TblProduces表中的同一個machineNum?這會導致主鍵錯誤。您需要將更新限制爲一個交叉引用記錄或先刪除無關記錄。 –