给SQL 表设置标识列。

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

将你设置标识列的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
这个就增加了一个自动增长列,然后,你再将原来的列删除。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-08-21
在建立新表时把主键也建好了

然后再导入数据。

或是把新表的数据删除,再建主键,最后再导入数据
第2个回答  2010-08-21
先确定原因在哪里,可以导入少量数据,然后再设置标识列看看会不会出问题。
相似回答