将一个表中个某一列修改为自动增长的方法

昨天有位学生问我“一个表已经建好了,能不能将里面的一个字段改为自动增长?”,“能,但没有必要去修改它,应该在建表的时候就设计好” 我说。 这时候他和另一位学生
讨论起来。他觉得可以,另一位试过说不行。因为他们不是我带班级的学生,他们也咨询了自己的老师,所以我没有再发表意见。

需求:
如何将一张表中个某一列修改为自动增长的。

解答:
1) 情景一:表中没有数据, 可以使用 drop column然后再add column

alter table 表名 drop column 列名
alter table表名 add列名 int identity(1,1)

2) 情景二:表中已经存在一部分数据

/**************** 准备环境********************/ --判断是否存在test表 if object_id(N'test',N'U') is not null drop table test --创建test表 create table test ( id int not null, name varchar(20) not null ) --插入临时数据 insert into test values (1,'成龙') insert into test values (3,'章子怡') insert into test values (4,'刘若英') insert into test values (8,'王菲') select * from test /**************** 实现更改自动增长列********************/ begin transaction create table test_tmp ( id int not null identity(1,1), name varchar(20) not null ) go set identity_insert test_tmp on go if exists(select * from test) exec(' insert into test_tmp(id, name ) select id, name from test with(holdlock tablockx)') go set identity_insert test_tmp off go drop table test go exec sp_rename N'test_tmp' ,N'test' , 'OBJECT' go commit GO /****************验证结果*****************/ insert into test values ('张曼') select * from test

总结:在表设计界面修改最为简单。如果该列已有的数据中存,修改可能会引发异常,可以使用数据导入导出的方式解决。总之,不管使用何种方式,都需求提前对数据做好备份。

时间: 2024-10-01 22:43:22

将一个表中个某一列修改为自动增长的方法的相关文章

将一个表中个某一列修改为自动增长的方法_MsSql

昨天有位学生问我"一个表已经建好了,能不能将里面的一个字段改为自动增长?","能,但没有必要去修改它,应该在建表的时候就设计好" 我说. 这时候他和另一位学生 讨论起来.他觉得可以,另一位试过说不行.因为他们不是我带班级的学生,他们也咨询了自己的老师,所以我没有再发表意见. 需求: 如何将一张表中个某一列修改为自动增长的. 解答: 1) 情景一:表中没有数据, 可以使用 drop column然后再add column alter table 表名 drop col

jsp-在JSP中能不能将一个表中的数据全部存放到作用域里然后在页面上有选择性的显示

问题描述 在JSP中能不能将一个表中的数据全部存放到作用域里然后在页面上有选择性的显示 在页面中可不可以通过判断让他满足某个条件是显示相应的数据 解决方案 你说的有选择的显示是根据条件查询呢,还是根据页面选择需要展示的数据列,然后再展示数据(类似数据库客户端的隐藏/显示某些列的数据呢? 前者就是条件查询,后者实现时可以让页面选择展示列名称,后台sql查询相应的列再进行数据展示. 解决方案二: 使用JSTL的c:if中的一个标签 例子<c:if test="${1<2}"&g

一列一列向access表中插入数据,列数是一个变量,用循环,用什么sql语句

问题描述 一列一列向access表中插入数据,列数是一个变量,用循环,用什么sql语句 用sql语句向ACCESS的一张表中添加数据,因为具体的列数还不清楚,所以想用循环一列一列向ACCESS表中插入数据,采用insert,为什么插入30行数据(即一列),当插第二列数据时就从第31行,第二列开始了(应该是第一行第二列开始).如果不用insert,用update那语句怎么写,一直出错. 解决方案 你的数据库表结构有问题.你应该把你的列作为行来插入.数据库中的表,列就应该是确定的. 解决方案二: 你

数据库 sql sqlserver-怎么给数据库的表中的某一列更新内容

问题描述 怎么给数据库的表中的某一列更新内容 数据库:SqlServer2005 表:table_1 列: a_id(pk,int) b_id(int) c_id(int) 现在我要把table_1中的b_id=3的c_id列在原来的值上加20 求sql 谢谢

mysql 同一个表中 如何 用一列的值 update 另一列

问题描述 mysql 同一个表中 如何 用一列的值 update  另一列.比如表 t1:id, user_name, nickname 如何用nickname 列来更新 user_name 列 多谢~~ 解决方案 update user set user_name = nickname;把所有的用户名更新为绰号

如何将一张数据库表中的某几列数据写入另一张表,同时再加上一列相同的数据。

问题描述 如何将一张数据库表中的某几列数据写入另一张表,同时再加上一列相同的数据.其实我就是想做一个一个订单编号对应多个商品的提交功能,请大家帮帮忙支支招,谢谢! 解决方案 解决方案二:根据要求写对应的updatesql解决方案三:引用1楼feiyun0112的回复: 根据要求写对应的updatesql 请问insertintot_wz_kc(wzid,jldwid,kcsl,yfpkcsl,cshwcbz)selectwzid,jldwid,0,0,'Y'fromt_wz_wzwhereyxb

《Oracle SQL疑难解析》——1.2 把表中所有字段都列出来

1.2 把表中所有字段都列出来 Oracle SQL疑难解析 1.2.1 要解决的问题 我们要把表中所有的字段数据都列出来,但并不想把每个字段名都在SELECT后面输入一遍. 1.2.2 解决方法 使用星号(*)占位符,即可代表所有表中字段,例如: select * from hr.employees where department_id = 50 and salary < 7500; ``` 因为列多页窄,查询结果换行显示,为节省空间,我们也仅仅在下面列了几行,但相信你已经能看出来用"

sql将一个表中的数据插入到另一个表中的方法_MsSql

列名不一定要相同,只要你在HH中列出要插入列的列表跟select from mm表中的选择的列的列表一一对应就可以了,当然两边的数据类型应该是兼容的. insert into hh (fielda,fieldb,fieldc) select fieldx,fieldy,fieldz from mm 复制代码 代码如下: ---更新计量点中不存在的数据,将台帐中的信息转移到计量点中 insert into MetricPoints (MeterID,MetricPointName,[Descrip

sql将一个表中的数据插入到另一个表中的方法

列名不一定要相同,只要你在HH中列出要插入列的列表跟select from mm表中的选择的列的列表一一对应就可以了,当然两边的数据类型应该是兼容的. insert into hh (fielda,fieldb,fieldc) select fieldx,fieldy,fieldz from mm 复制代码 代码如下: ---更新计量点中不存在的数据,将台帐中的信息转移到计量点中 insert into MetricPoints (MeterID,MetricPointName,[Descrip