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建立
![技术分享](https://image.cha138.com/20210628/9dd2814d0698430597149db52c678b7c.jpg)
创建时NOT NULL 限制非空
PRIMARY KEY 该字段为主键
DEFAULT ‘男‘ 设默认值为“男”
CONSTRAINT 约束名 CHECK (条件)
![技术分享](https://image.cha138.com/20210628/e41c3867f02f4f4590765192fdb28334.jpg)
![技术分享](https://image.cha138.com/20210628/2e99b3b4cffd420a800c84fb84e87ced.jpg)
![技术分享](https://image.cha138.com/20210628/deeb1700049f48398f49d3cb0c765d45.jpg)
注意这里外键和主键放在最后面。
![技术分享](https://image.cha138.com/20210628/c27364a0bec0483298ca4c6d80c2511d.jpg)
![技术分享](https://image.cha138.com/20210628/cd5ba4b866534fceb2ae5011b2429764.jpg)
![技术分享](https://image.cha138.com/20210628/19f661a7b55e48bca8df3bd45bf23d8a.jpg)
![技术分享](https://image.cha138.com/20210628/04ca24bdb2c04b89ac9293bfc1b5478a.jpg)
(1)新增加字段时可以同时设置空值约束、默认值约束和标识列。
(2)表中的列名必须唯一
(3)若不允许为空时则必须给新增加的列指定默认值,否则语句执行错误
ALTER TABLE 只允许添加满足下述条件的列: 列可以包含空值;或者列具有指定的DEFAULT 定义;或者要添加的列是标识列或时间戳列;或者,如果前几个条件均未满足,则表必须为空以允许添加此列。
![技术分享](https://image.cha138.com/20210628/378db67215814accb30aa93b915a943a.jpg)
![技术分享](https://image.cha138.com/20210628/5de77e549dde433784046f48bd268084.jpg)
![技术分享](https://image.cha138.com/20210628/77ef89ecf80f4e55b37271c145f64820.jpg)
![技术分享](https://image.cha138.com/20210628/e94876669c6043749d2b2770c805cd75.jpg)
为约束起名,便于引用
![技术分享](https://image.cha138.com/20210628/c67aa690b87c4d1bb8b46d91c3f10a54.jpg)
![技术分享](https://image.cha138.com/20210628/08d21dc6423643ce87e60efbaf2effbe.jpg)
![技术分享](https://image.cha138.com/20210628/c14dd118bf0f4d16975da2a332cd6f3a.jpg)
注意外键的值要存在
![技术分享](https://image.cha138.com/20210628/1fe39c644c8d4922bb82664deaf10ad5.jpg)
![技术分享](https://image.cha138.com/20210628/090f6869f891496aa5f9eebdc1ca7816.jpg)
![技术分享](https://image.cha138.com/20210628/eb7cd542ee93450e87da84c547868051.jpg)
![技术分享](https://image.cha138.com/20210628/bf156fe5719248ac93eb0d92f52579e3.jpg)
![技术分享](https://image.cha138.com/20210628/028147fb41994ff5864a1b20c43814f0.jpg)
![技术分享](https://image.cha138.com/20210628/2ab615e7699f44ea85446044a3f5e41b.jpg)
![技术分享](https://image.cha138.com/20210628/dbc7ef34644d4211b81338c0bcd9b049.jpg)
![技术分享](https://image.cha138.com/20210628/014791d725cd45dcb2d095590975b87a.jpg)
![技术分享](https://image.cha138.com/20210628/d53e643765714488a11b79400fadbb70.jpg)
![技术分享](https://image.cha138.com/20210628/14747aef9a9144228f5344401c4a7852.jpg)
![技术分享](https://image.cha138.com/20210628/1915feed53af4eec81bc4d10f3e259f6.jpg)
以上是关于sql sever中怎么把已有数据的列改为标识列?的主要内容,如果未能解决你的问题,请参考以下文章