sql - 交易重复错误

标签 sql sql-server database stored-procedures transactions

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

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 是否存在。您可以使用 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/

相关文章:

mysql - 如何将多列数据合并为一列? 【邻接表模型查询】

sql - 在 SSIS 中将月份名称更改为月份编号

mysql - SQL BETWEEN 区分大小写

sql-server - SQLServer 中子字符串与右左组合的相对性能

sql - INSERT <table> (x) VALUES (@x) WHERE NOT EXISTS ( SELECT * FROM <table> WHERE x = @x) 会导致重复吗?

php - 如何添加到数据库中的现有值

database - 如何在数据库中对数据和逻辑进行建模?

mysql - 无法在 MySQL 中删除 "MUL"键/索引 - SHOW 中列出的列

sql - 使用 SQL 计算列中的项目数

Mysql 将所有表名改为小写