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中怎么把已有数据的列改为标识列?的主要内容,如果未能解决你的问题,请参考以下文章