我正在编写一个 ODBC 类来连接到远程 SQL Server 数据库。我大部分时间都在工作。
该类能够生成如下查询:
UPDATE Customers SET Id=?,Name=?,TaxId=?,ContactFName=?,ContactLName=?,Phone_Office=?,Phone_Mobile=?,Phone_Home=?,Email=?,Website=?,Address1_Physical=?,Address2_Physical=?,City_Physical=?,State_Physical=?,Zip_Physical=?,Address1_Billing=?,Address2_Billing=?,City_Billing=?,State_Billing=?,Zip_Billing=?,StartingBalance=?,Discount=?,BillingSequence=?,BillingCategory=?,ShowOnReport=?,Active=?,CreateDate=?
如您所见,这是一个 UPDATE 查询。然而,运行这个查询给我一个错误:
Microsoft ODBC Driver 17 for SQL Server (SQL Server) : ReturnCode: -1 : Violation of PRIMARY KEY constraint 'PK_Customers'. Cannot insert duplicate key in object 'dbo.Customers'. The duplicate key value is (82). (State: 23000, NativeError: 2627) : The statement has been terminated. (State: 01000, NativeError: 3621)
我很困惑为什么我在进行更新时收到有关插入的错误。有人看过吗?
注意事项:
Id
是主键。我首先从数据库中读取所有列值,然后更新那些我想更改的值。 ID 不会改变。- 上述错误由我的代码组合而成,但基于
SQLGetDiagRec()
返回的消息。
最佳答案
UPDATE 语句中没有 WHERE 子句,因此它试图更新数据库中的每一行,并且由于 ID 是正在更改的列之一,它试图将每一行的 ID 设置为相同的值。这会导致尝试创建重复的主键。
确保您的 UPDATE 语句具有适当的 WHERE 子句...例如“WHERE ID =?”...如果 ID 没有更改,最好不要将 ID 包含在该 UPDATE 语句中。
关于c++ - 从 UPDATE 查询中获取 'Cannot insert duplicate key',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57912455/