SQL主键异常

时间:2015-05-08 17:34:10

标签: sql sql-server sql-server-2012-express

我有一个Mircrosoft Sql Server数据库,由大约8个表组成,这些表都与我要更新的相关。为此,我创建了许多临时表

"CREATE TABLE [vehicle_data].[dbo].[temp_MAINTENANCE_EVENT] (" +
                       "[maintenance_event_id] int," +
                       "[maintenance_computer_code_id] int," +
                       "[veh_eng_maintenance_id] int," +
                       "CONSTRAINT [PK_maintenance_event_id"] PRIMARY KEY CLUSTERED ([maintenance_event_id] ASC))";

然后在创建所有临时表之后,我删除现有表,重命名临时表,并向新表添加外键和索引以加速连接和查询。

我遇到的问题是剩下的原始主键引用。所以当我再次更新时,我得到了

  

异常:已有一个名为'PK_maintenance_event_id'的对象   在数据库中。无法创建约束。

我想知道什么是最好的行动方案?我在创建临时表时是否应该设置主键,而是在重命名后将其添加到表中?或者有没有办法重命名约束,以便当我重命名表时,我可以更改主键约束的名称。

在原始表被删除之后,我希望尽可能少的停机时间,但是在删除表之前发生的任何事情可能需要很长时间而且无关紧要。

1 个答案:

答案 0 :(得分:3)

如果您的临时表需要该约束

创建时 使用

CONSTRAINT [PK_maintenance_event_id_temp"]

而不是

CONSTRAINT [PK_maintenance_event_id]

将temp重命名为真实表格时

exec sp_rename [PK_maintenance_event_id_temp], [PK_maintenance_event_id]