我以前用过嵌套游标,外面一层,里面一层,本来游标的效率就不高,所以建议你不要用游标。根据你说的迁移工程,应该只是想把数据库的部分数据迁移到另外一个数据库,而不是整个数据库都要迁移过去,如果是整个库迁移的话,可以直接备份还原即可。我之前也做过,想把一个数据库里的数据,迁移到另一个库,通过语句来实现。首先建立连接服务器。然后把需要迁移的数据所在的表名放到一个表中,然后根据这些表名,来生成动态语句,类似于这样:insert into 连接服务器名.目标数据库.dbo.目标表(字段名) select 字段名 from 源数据库.dbo.源表但由于数据量比较大,有些表有几百万条数据,后来改为: declare @i int,@count intset @i = 1 set @count = select count(*) from 源数据库.dbo.源表while @i <= @count begin insert into 连接服务器名.目标数据库.dbo.目标表(字段名) select top 10000 字段名 from 源数据库.dbo.源表
select 字段名
from 源数据库.dbo.源表但由于数据量比较大,有些表有几百万条数据,后来改为:
declare @i int,@count intset @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
你可以试试
数据库迁移,用SSIS确实是很好的方法。但是很多人都不会。
SSIS是BI的一部分,还包括SSRS, SSAS,要说的话,不是一句两句能说完的.
BI是商务智能化, SSIS主要用于其中的数据传输,转换,SSRS只要用于数据呈现,SSAS主要用于数据归纳,分析总结.
除非是存在版本差异什么的
还可以使用BCP
SSIS也是一个办法
我的数据库版本比较老是sql server 2000,好像没有SSIS吧
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里运行不就好了吗?