sql sever中怎么把已有数据的列改为标识列?

做数据迁移,原有表中有标识列为ID,由于ID为外键,所以转移到新表中没设标识列,现在怎么样才能把这个ID改为标识列,且数据不变呢?

如果这列中没有数据或者数据可弃之不用的话,可用row_number来解决,但前提是需要有一列为主键

如student表中,其中姓名为主键:

姓名    å¹´é¾„    å¾…用列

张三    20

李四    19

王五    19


执行语句:

update student set a.待用列=b.rn from student a inner (select å§“名,row_number() over (order by å¹´é¾„ desc) rn from student) b on a.姓名=b.姓名

结果为:

姓名    å¹´é¾„    å¾…用列

张三    20        1

李四    19        2

王五    19        3

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-29
可以用设计器加上标识列属性,设计器会自动复制数据追问

我试了,数据实在是太多了,会出现服务器超时。。“超时时间已到。在操作完成之前超时时间已过或服务器未响应"。就是这错。。我的服务器超时时间是0

追答

有多少数据啊?如果自己手动设置的话很麻烦,手动操作设计器的步骤~

追问

几百万吧。。。。你还是告诉我怎么弄吧,要弄不了,我们经理要杀人了

追答

几百万还可以,也不算太多,但是如果有大数据类型的话就麻烦了
我告诉你设计器的操作步骤,你慢慢做吧
先用原表生成建表脚本,然后修改要操作的列为自增列(索引可以现在创建也可以填充完数据再创建),然后用set identity_insert 选项将原表数据填充进新表数据
最后将原表删除或改名(建议改名,待数据确认无误后再删除),再将新表表名改为原表表名
不要嫌麻烦,设计器就是这样操作的,而且只能这样操作

本回答被提问者采纳
相似回答