以下代码能否用一句(或数句) SQL 语句实现? (100分)

  • 主题发起人 主题发起人 Pc 狂迷
  • 开始时间 开始时间
P

Pc 狂迷

Unregistered / Unconfirmed
GUEST, unregistred user!
有个表原有15万行数据,没设主键,现想为每条记录按顺序加一个 ID ,可下面语句太太太
慢了,4000条都用了十几分钟。所以希望能用 SQL 语句加速。以下能否用一句 SQL 实现?
var
i : Integer ;
begin
i := 0;
ADOTable1.Active := True;
adotable1.first;
while not ADOTable1.Eof do
begin
Inc(i);
adotable1.edit;
ADOTable1.FieldByName('id').AsInteger := i;
ADOTable1.Next;
end;//while
ADOTable1.post;
end;

 
why not set id field type indentity to complete increase or others operation

maybe i'm unknown your idea;
 
CachedUpdates属性设为true试一下。
 
这个表中主键是什么呀,说清楚
 
只所以变慢的原因是因为你每改动一次字段都要结果回写DB,所以把CachedUpdates属性
设为true,即先缓存变动,等发出post命令的时候一次写回DB,速度相信可以提高不少。
 
这个表原有15万行数据,没设主键,现想为每条记录按顺序加一个 ID ,可上述句话太太太
慢了,4000条都用了十几分钟。所以希望能用 SQL 语句加速。
 
ADO中可以把CacheSize属性设置的大一点,比如1000。
 
使用命令:(這也是一個自增型呀,何必要自己寫?)
Alter table TableName add ID int IDENTITY (1, 1) NOT NULL

with Query do
begin
Close;
SQL.Clear;
SQL.Add('Alter table TableName add ID int IDENTITY (1, 1) NOT NULL ');
Prepare;
ExecSQL;
end;

然後刷新一下數據源
 
同意 bes96261
 
按以下步骤:
一、你可以另外建一个新表,新表里应该包含原表的所有字段,再增加一个ID字段,设ID字段为
主键,自动增长型;
二、将原来表的所有数据导入到新表:Insert Into Newtable(Col1, Col2) Select Col1, Col2 From OldTable
注意在导入数据时,不要对ID字段赋值;
三、删除原表,将新表更名为原来的表名。
四、结束。
 
你还是老老实实的在数据库服务器端用SQL语句!

不过在sql server2000下最好少用IDENTITY类型
 
各位大 侠,

可不可以 用 另一个 思路.

用 存储过 程 会不会 快一点

全在后台. 思路 如 watter .
 
select identity(int,1,1),* into newtable from tablename
把旧表删除,如果不支持,可以用sqlserver的导入导出,进入后再做
 
同意 bes96261 的方法,一个一个地增加确实非明智之举!
 
接受答案了.
 

Similar threads

回复
0
查看
978
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部