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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

参考技术A 可以用设计器加上标识列属性,设计器会自动复制数据追问

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

追答

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

追问

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

追答

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

本回答被提问者采纳

sql sever建立

 技术分享
 创建时NOT NULL 限制非空
PRIMARY KEY 该字段为主键
DEFAULT ‘男‘  设默认值为“男”
CONSTRAINT 约束名 CHECK (条件)
技术分享
技术分享
 技术分享
 注意这里外键和主键放在最后面。
技术分享
 技术分享
技术分享
 技术分享
(1)新增加字段时可以同时设置空值约束、默认值约束和标识列。 
(2)表中的列名必须唯一  
(3)若不允许为空时则必须给新增加的列指定默认值,否则语句执行错误
ALTER TABLE 只允许添加满足下述条件的列: 列可以包含空值;或者列具有指定的DEFAULT 定义;或者要添加的列是标识列或时间戳列;或者,如果前几个条件均未满足,则表必须为空以允许添加此列
技术分享
 技术分享
 技术分享
 技术分享
 为约束起名,便于引用
技术分享
 技术分享
 技术分享
 注意外键的值要存在
技术分享
技术分享
技术分享
技术分享
技术分享
技术分享
技术分享
技术分享
技术分享
 技术分享
 技术分享
 


以上是关于sql sever中怎么把已有数据的列改为标识列?的主要内容,如果未能解决你的问题,请参考以下文章

sql怎么把一个表的一列替换到对应的另一个表中对应的列?

怎样将ms sql的主键设置为每次自增加1

sql server建表时怎么设置ID字段自增

如何用sql创建自增列?

PIVOT在SQL Sever里面和Oracle里面的用法区别

SQL 两张表合并 (两张表的列都相同)