日期:2014-05-17  浏览次数:20473 次

嵌套游标数据迁移很慢
因需要将一个库里的数据迁移到另一个库,根据迁移的条件写了一个存储过程,里面使用了游标嵌套,执行时发现速度太慢。请问是不是游标嵌套的原因,期待帮助。。。

------解决方案--------------------
游标的效率不高,执行时候肯定速度慢,能避免使用游标的尽量避免。
------解决方案--------------------
我以前用过嵌套游标,外面一层,里面一层,本来游标的效率就不高,所以建议你不要用游标。

根据你说的迁移工程,应该只是想把数据库的部分数据迁移到另外一个数据库,而不是整个数据库都要迁移过去,如果是整个库迁移的话,可以直接备份还原即可。

我之前也做过,想把一个数据库里的数据,迁移到另一个库,通过语句来实现。

首先建立连接服务器。

然后把需要迁移的数据所在的表名放到一个表中,然后根据这些表名,来生成动态语句,类似于这样:

insert into 连接服务器名.目标数据库.dbo.目标表(字段名)
select 字段名
from 源数据库.dbo.源表

但由于数据量比较大,有些表有几百万条数据,后来改为:
declare @i int,@count int

set @i = 1
set @count = select count(*) from 源数据库.dbo.源表

while @i <= @count
begin

insert into 连接服务器名.目标数据库.dbo.目标表(字段名)
select top 10000 字段名
from 源数据库.dbo.源表
    
    set @i = @i + 10000
end


你可以试试


------解决方案--------------------
那就用BCP吧
bcp out :
BCP DBNAME.dbo.TBName Out "ServerSource.DBNAME.dbo.TBName" /N /U User /P pwd /S ServerSource
bcp in:
BCP DBNAME.dbo.TBName In "ServerSource.DBNAME.dbo.TBName" /N /E /q /k /U repdbo /P Rep@Dbo /b 50000 /S SERVERTARGET


------解决方案--------------------
你的问题是要跨服务器吧,,,
问题是数据量大会导致速度很慢,,,但跨服务器是无法避免的
我的建议是,你小表用linked server慢慢导,应该花费时间不多

大表就用bcp这样导出文件后,拷贝文件到目的端服务器再BCO导入就解决了
你有很多表,,,写个脚本就产生了很多BCP了,,写在BAT里运行不就好了吗?