嵌套游标数据迁移很慢
因需要将一个库里的数据迁移到另一个库,根据迁移的条件写了一个存储过程,里面使用了游标嵌套,执行时发现速度太慢。请问是不是游标嵌套的原因,期待帮助。。。
------解决方案--------------------游标的效率不高,执行时候肯定速度慢,能避免使用游标的尽量避免。
------解决方案--------------------我以前用过嵌套游标,外面一层,里面一层,本来游标的效率就不高,所以建议你不要用游标。
根据你说的迁移工程,应该只是想把数据库的部分数据迁移到另外一个数据库,而不是整个数据库都要迁移过去,如果是整个库迁移的话,可以直接备份还原即可。
我之前也做过,想把一个数据库里的数据,迁移到另一个库,通过语句来实现。
首先建立连接服务器。
然后把需要迁移的数据所在的表名放到一个表中,然后根据这些表名,来生成动态语句,类似于这样:
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里运行不就好了吗?