我有一个由大约 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))";
然后在创建所有临时表后,我删除现有表,重命名临时表,并向新表添加外键和索引以加快连接和查询速度。
我遇到的问题是原始主键引用仍然存在。所以当我再次去更新时,我得到了
Exception: There is already an object named 'PK_maintenance_event_id' in the database. Could not create constraint.
我想知道最好的行动方案是什么?是不是创建临时表的时候不设置主键,改名后添加到表中?或者有没有办法重命名约束,以便在我重命名表时可以更改主键约束的名称。
删除原始表后,我希望停机时间尽可能短,但在删除表之前发生的任何事情都可能需要很长时间,这无关紧要。
最佳答案
如果您的临时表需要该约束
创建时 使用
CONSTRAINT [PK_maintenance_event_id_temp"]
代替
CONSTRAINT [PK_maintenance_event_id]
当你将 temp 重命名回真实表时
exec sp_rename [PK_maintenance_event_id_temp], [PK_maintenance_event_id]
关于SQL 主键异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30129644/