我有一个更新表生成的事务。它将产品设定为由某台机器制造。但是,如果这台机器已经存在于我得到的表中
违反主键约束“产生主键”。无法插入
对象“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';

最佳答案

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

DECLARE @Exists INT

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

IF @Exists = 0
BEGIN
     -- Perform UPDATE
END

关于sql - 交易中出现重复错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17170986/

10-09 06:43