【问题标题】:SQL Primary Key ExceptionSQL 主键异常
【发布时间】:2015-05-08 17:34:10
【问题描述】:

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

"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”的对象 在数据库中。无法创建约束。

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

在删除原始表后,我希望尽可能少的停机时间,但在删除表之前发生的任何事情都可能需要很长时间,这并不重要。

【问题讨论】:

  • 需要保留PK名吗?如果没有,那么就不要命名它,SqlServer 将为它组成一个唯一的名称。
  • 哈!刚刚注意到,右边大红色广告中的那个人是我的一个朋友。好的。 :-)
  • 我没有看到广告哈哈,但对它的语法有什么想法吗?
  • 糟糕,好的,我找到了。您只需删除当前语法的 CONSTRAINT [name..] 部分。
  • @SeanLange 是的,就是这样。

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


【解决方案1】:

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

创建时 使用

CONSTRAINT [PK_maintenance_event_id_temp"]

而不是

CONSTRAINT [PK_maintenance_event_id]

当你将 temp 重命名为真实表时

exec sp_rename [PK_maintenance_event_id_temp], [PK_maintenance_event_id]

【讨论】:

    猜你喜欢
    • 2013-04-11
    • 2011-04-06
    • 2012-03-15
    • 1970-01-01
    • 2018-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多