加载数据后创建主键和标识列

时间:2009-05-11 15:48:13

标签: sql-server tsql primary-key identity

我快速向您提问SQL专家。我有没有主键列的现有表,并且未设置标识。现在我试图通过将现有的整数列作为主键并为该列添加标识值来修改这些表。我的问题是,在进行这些更改之前,我应该先将表中的所有记录复制到临时表中。如果我运行T-SQL commnad来创建主键并在这些表上添加标识列,是否会丢失所有以前的记录。我应该采取哪些方法,例如

1)创建临时表以复制要修改的表中的所有记录 2)将所有记录加载到temptable 3)对表模式进行更改 4)最后将临时表中的记录加载到原始表中。

有更好的方法吗?我非常感谢你的帮助

由于

5 个答案:

答案 0 :(得分:4)

工具>选项>设计师>表和数据库设计师

取消选中“阻止保存需要重新创建表格的更改”

[编辑]我用填充的表尝试了这个,我没有丢失数据,但我对此并不是很了解。

答案 1 :(得分:3)

希望表中没有太多记录。如果使用Management studio将现有字段更改为标识,则会创建另一个具有标识字段集的表。它会转换身份插入并从原始表中删除记录,然后关闭身份插入。然后它删除旧表并重命名它刚刚创建的表。如果你有很多记录,这可能是一个漫长的过程。如果是这样的话,我会将其编写出来,然后在非工作时间运行的作业中执行此操作,因为在执行此操作时表将完全锁定。

答案 2 :(得分:2)

只需在管理工作室中执行所有更改,将生成的脚本复制/粘贴到文件中。此时不要保存更改。根据需要查看并编辑该脚本,它可能几乎完全符合您的想法(它将删除原始表并将临时表重命名为原始名称),但也处理所有约束和FK。

答案 3 :(得分:0)

如果您现有的整数列是唯一且合适的,那么将其转换为PK应该没有问题。

另一种选择,如果您不想使用现有列,可以将新PK列添加到主表中,填充它并播种,然后运行update语句以使用新PK更新所有其他表。 / p>

无论你做什么,一定要先备份!!

答案 4 :(得分:0)

完成数据复制后,您始终可以添加IDENTITY列。然后,您还可以将IDENTITY种子重置为最大整数+ 1.这应该可以解决您的问题。

DBCC CHECKIDENT('MyTable',RESEED,n)

其中n是您希望身份开始的号码。