SQL Server更新错误 - 消息2627

时间:2013-03-14 05:35:47

标签: sql-server sql-update

我正在尝试更新我的表“招标”。

它有以下列:

  • 申请号(rq_no)
  • 征用年份(rq_year)
  • 投标号码(te_no)
  • te_date
  • TE-DUE_DATE
  • 投标状态(te_status)
  • te_year

我尝试了以下代码:

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)   声明已经终止。

这些意味着什么?

1 个答案:

答案 0 :(得分:2)

这意味着您在该表上定义了一个主键,其中包含与其显示的值相关的字段 - 即(N0066,Q052401C,D,2012) - 如果您将te-status字段更改为D在您要更新的行上,这会产生一个已存在的主键。

根据您使用的数据库,您有时无法更新主键字段 - 您应该删除旧行的DELETE和更改行的INSERT(使用新键)。