给SQL 表设置标识列。

我有一个表,数据有100W条左右,然后我又建立一个新结构的表,将旧表中数据导入(其中旧表中标识列ID也一起导入),导入后再将新表的ID设置为主键和标识列,但是当给新表的I... 我有一个表,数据有100W条左右,然后我又建立一个新结构的表,将旧表中数据导入(其中旧表中标识列ID也一起导入),导入后再将新表的ID设置为主键和标识列,但是当给新表的ID设置标识列的时候,首先提示“将定义更改保存到包含大量数据的表中可能需要很长时间。在保存更改期间,将无法访问表数据。”,然后确定,大概30秒左右提示“超时时间已到。在操作完成之前超时时间已过或服务器未响应。”,请达人解决下这个问题。
lyws518:原因是数据量太大,所以SQL响应超时。
leeyige:请看题目,问题出在设置标识列,
MeChess :我是手动设置标识列的。
MeChess :用查询分析器创建标识列的SQL语句是啥,不破坏已有的标识,就是ID这列已经有数据了,但是不是标识列,想给变成标识列,而且不破坏已有的数据
MeChess :alter table allday alter column yyyymmdd varchar(10) not null
这段只设置为非空,但是标识种子呢,要自动增长为1的,怎么写
展开
 我来答
MeChess
2010-08-25 · TA获得超过1538个赞
知道小有建树答主
回答量:448
采纳率:100%
帮助的人:575万
展开全部
将你设置标识列的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
这个就增加了一个自动增长列,然后,你再将原来的列删除。
百度网友a800768
2010-08-21 · TA获得超过1841个赞
知道大有可为答主
回答量:1928
采纳率:0%
帮助的人:1725万
展开全部
在建立新表时把主键也建好了

然后再导入数据。

或是把新表的数据删除,再建主键,最后再导入数据
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
快乐编程教育
2010-08-21 · 专业IT知识分享,编程技巧分享
快乐编程教育
采纳数:342 获赞数:812

向TA提问 私信TA
展开全部
先确定原因在哪里,可以导入少量数据,然后再设置标识列看看会不会出问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式