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

解决方案 »

  1.   

    我以前用过嵌套游标,外面一层,里面一层,本来游标的效率就不高,所以建议你不要用游标。根据你说的迁移工程,应该只是想把数据库的部分数据迁移到另外一个数据库,而不是整个数据库都要迁移过去,如果是整个库迁移的话,可以直接备份还原即可。我之前也做过,想把一个数据库里的数据,迁移到另一个库,通过语句来实现。首先建立连接服务器。然后把需要迁移的数据所在的表名放到一个表中,然后根据这些表名,来生成动态语句,类似于这样: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.源表
        
        set @i = @i + 10000
    end
    你可以试试
      

  2.   

    +1
    数据库迁移,用SSIS确实是很好的方法。但是很多人都不会。
      

  3.   


    SSIS是BI的一部分,还包括SSRS, SSAS,要说的话,不是一句两句能说完的.
    BI是商务智能化, SSIS主要用于其中的数据传输,转换,SSRS只要用于数据呈现,SSAS主要用于数据归纳,分析总结.
      

  4.   

    额,迁移一般不是直接移动数据库文件吗?
    除非是存在版本差异什么的
    还可以使用BCP
    SSIS也是一个办法
      

  5.   


    我的数据库版本比较老是sql server 2000,好像没有SSIS吧
      

  6.   

    那就用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
      

  7.   

    你的问题是要跨服务器吧,,,
    问题是数据量大会导致速度很慢,,,但跨服务器是无法避免的
    我的建议是,你小表用linked server慢慢导,应该花费时间不多大表就用bcp这样导出文件后,拷贝文件到目的端服务器再BCO导入就解决了
    你有很多表,,,写个脚本就产生了很多BCP了,,写在BAT里运行不就好了吗?