2013-03-14 86 views
1

我正在尝试更新我的表“招标”。SQL服务器更新错误 - 消息2627

它有这些列:

  • 征用没有(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' 例如成功:

set te_status='S' 

当我跑

SELECT * FROM TENDER 
WHERE 
    rq_no LIKE 'Q052401C' AND te_year LIKE '2012' AND te_no LIKE 'n0066' 

,它retu只有一行。

Ιt显示我下面的错误:

Msg 2627, Level 14, State 1, Line 1 Violation of PRIMARY KEY constraint 'PK_tender'. Cannot insert duplicate key in object 'dbo.tender'. The duplicate value is (N0066, Q052401C, D, 2012) The statement has been terminated.

是什么这一切意味着什么呢?

回答

2

这意味着您在该表上定义了一个主键,该主键由与其显示的值相关的字段组成 - 即(N0066,Q052401C,D,2012) - 并且如果将te状态字段更改为D在你正在更新的那一行上,那么这将导致一个已经存在的主键。

根据您使用的数据库,您有时无法更新主键字段 - 您应该对旧行执行DELETE操作,并对已更改行(使用新键)执行INSERT操作。