1

我有一个更新表产生的事务。它设定了由特定机器制造的产品。但是,如果这台机器已经存在于我得到的表中

违反 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 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';
4

1 回答 1

2

在尝试更新之前检查 MachineNumber 是否存在。您可以使用EXISTSCOUNT

例如:

DECLARE @Exists INT

SELECT @Exists = COUNT(MachineNumber)
FROM TblProduces
WHERE MachineNumber = @machinNum

IF @Exists = 0
BEGIN
     -- Perform UPDATE
END
于 2013-06-18T14:07:15.340 回答