1

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

它有这些列:

  • 申请编号(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'in 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'

,它返回一行。

它向我显示以下错误:

消息 2627,级别 14,状态 1,第 1 行违反主键约束“PK_tender”。无法在对象“dbo.tender”中插入重复键。重复值为 (N0066, Q052401C, D, 2012) 语句已终止。

所有这些是什么意思?

4

1 回答 1

2

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

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

于 2013-03-14T05:46:20.540 回答