我正在尝试更新我的表“招标”。
它有以下列:
我尝试了以下代码:
update tender
set te_status='D'
where rq_no like 'Q052401C' AND te_year like '2012' and te_no like 'n0066'
如果我在'D'
中放置任何其他字符代替te_status
,则除“D”外更新成功
e.g:
set te_status='S'
当我跑步时
SELECT * FROM TENDER
WHERE
rq_no LIKE 'Q052401C' AND te_year LIKE '2012' AND te_no LIKE 'n0066'
,它返回一行。
告诉我以下错误:
Msg 2627,Level 14,State 1,Line 1 违反PRIMARY KEY约束'PK_tender'。 无法在对象'dbo.tender'中插入重复键。 重复值为(N0066,Q052401C,D,2012) 声明已经终止。
这些意味着什么?
答案 0 :(得分:2)
这意味着您在该表上定义了一个主键,其中包含与其显示的值相关的字段 - 即(N0066,Q052401C,D,2012) - 如果您将te-status字段更改为D在您要更新的行上,这会产生一个已存在的主键。
根据您使用的数据库,您有时无法更新主键字段 - 您应该删除旧行的DELETE和更改行的INSERT(使用新键)。