【发布时间】:2013-09-10 20:30:14
【问题描述】:
我们有几张表有超过 300,000 条记录,将记录从一个表传输/复制到另一个表需要几个小时。在处理大量数据时,有没有比使用游标和将每条记录从一张表逐个复制到另一张表更有效的方法?
代码:
open SOMETBL
fetch SOMETBL into @key1,@key2,@key3,@key4
while(@@fetch_status = 0)
begin
SELECT @key1InMapping = count(*) FROM SOMEOTHERDB.dbo.tblSOMETBLping WHERE fldEServicesKey = @key1
SELECT @eServiceTypeKey = fldAServiceTypeKey FROM SOMEOTHERDB.dbo.tblAServiceType WHERE fldAServiceTypeNumber = @key4
if (@eServiceTypeKey=null or @eServiceTypeKey=0)
set @eServiceTypeKey = 50
if @key1InMapping>0
begin
update SOMEOTHERDB.dbo.tblSOMETBLping set fldAServiceTypeKey=@eServiceTypeKey where fldEServicesKey= @key1
-- print 'post='+convert(varchar,@key2) + ' :key1='+convert(varchar,@key1)+ ' :serviceTypeKey='+convert(varchar,@eServiceTypeKey)+' : serviceTypeNum='+convert(varchar,@key4)
end
fetch SOMETBL into @key1,@key2,@key3,@key4
end
close SOMETBL
【问题讨论】:
-
游标使这需要几个小时。一个直接的 SQL 查询将需要几秒钟到几分钟才能复制 300,000 行。
-
是在单个数据库中进行数据传输,还是在数据库之间移动数据?
-
@Declan_K 这发生在单个数据库中。
-
通常,将数据从一个表移动到另一个表的最佳方法是根本不这样做。只需使用第一个表中的数据。
标签: sql sql-server large-data-volumes