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