我有一个更新表产生的事务。它设置一个产品由特定的机器制造。但是,如果这台机器已经存在于表中,我会得到
Violation of PRIMARY KEY constraint 'produces_PK'. Cannot insert duplicate key in object '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 是否存在。您可以使用 EXISTS
或 COUNT
例如:
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/