给SQL 表设置标识列。

我有一个表,数据有100W条左右,然后我又建立一个新结构的表,将旧表中数据导入(其中旧表中标识列ID也一起导入),导入后再将新表的ID设置为主键和标识列,但是当给新表的ID设置标识... 我有一个表,数据有100W条左右,然后我又建立一个新结构的表,将旧表中数据导入(其中旧表中标识列ID也一起导入),导入后再将新表的ID设置为主键和标识列,但是当给新表的ID设置标识列的时候,首先提示“将定义更改保存到包含大量数据的表中可能需要很长时间。在保存更改期间,将无法访问表数据。”,然后确定,大概30秒左右提示“超时时间已到。在操作完成之前超时时间已过或服务器未响应。”,请达人解决下这个问题。 lyws518:原因是数据量太大,所以SQL响应超时。 leeyige:请看题目,问题出在设置标识列, MeChess :我是手动设置标识列的。 MeChess :用查询分析器创建标识列的SQL语句是啥,不破坏已有的标识,就是ID这列已经有数据了,但是不是标识列,想给变成标识列,而且不破坏已有的数据 MeChess :alter table allday alter column yyyymmdd varchar(10) not null 这段只设置为非空,但是标识种子呢,要自动增长为1的,怎么写 展开

第1个回答  2019-09-04
将你设置标识列的SQL语言贴出来,看看问题在哪里?
-------------------------------------------
不要手动设置,你用查询分析器,写好SQL语言,然后按Ctrl+L如果优化成功,则再按Ctrl+E执行设置标识列。
------------------------------------------
例如你的表名是:
AllDay
要设置的标识列是:yyyymmdd则
1、修改为非空
alter
table
allday
alter
column
yyyymmdd
varchar(10)
not
null
Ctrl+L->Ctrl+E
2、将这个列设为主键(标识列---不能重复)
ALter
table
AllDay
add
primary
key(yyyymmdd)
Ctrl+L->Ctrl+E
-----------------------------------------------
自动增长列有点麻烦的,如果你想导入的数据列和原表具有相同的自动增长功能,这个在SQL中不能实现(你手动设置之所以成功,实际上是删除再建立的过程),一般你可以这样
alter
table
allday
add
idcol
int
identity
这个就增加了一个自动增长列,然后,你再将原来的列删除。
相似回答