想从一个数据库中(有大量数据)导入到另一个数据库中(空数据库),请问用什么方法可以提高速度?知道有一种方法:把一定数量的记录写入内存,然后一次性写入到数据库中,请问具体如何操作?还有想看导入进度的话如何实现?请教各位高人啦!

解决方案 »

  1.   

    导入与导出数据库结构不同,比如导出数据库为 exportDB 有列:Col1,Col2, Col3,Col4, 想从中导出exCol2, exCol3,exCol4到导入数据库importDB(imCol1,imCol2,imCol3)中。
    insert into importDB (imCol1,imCol2,imCol3) select exCol2, exCol3,exCol4 from  exportDB我的问题是: 是否可以用流的方式写入或者其他方式,使得导入速度变快,因为记录数量很大
      

  2.   

    BULK INSERT 如果非要用语句来,请把importDB 所在数据库还原模式设为SIMPLE,
    把表importDB 的非聚集索引禁用,
    把照importDB 的聚集索引排好顺序再进行插入,(这是有索引的前提下)如果importDB  里面没数据,那么导入后再建立非聚集索引
      

  3.   

    BULK INSERT 请问具体如何实现,是不是还得建立临时表,dataset之类的
      

  4.   

    /************************************************************************************************
                              乌龟代码
    *************************************************************************************************//******* 导出到excel */
    EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""' /*********** 导入Excel */
    SELECT * 
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 
    'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions /*动态文件名 
    declare @fn varchar(20),@s varchar(1000) 
    set @fn = 'c:\test.xls' 
    set @s ='''Microsoft.Jet.OLEDB.4.0'', 
    ''Data Source="'+@fn+'";User ID=Admin;Password=;Extended properties=Excel 5.0''' 
    set @s = 'SELECT * FROM OpenDataSource ('+@s+')...sheet1$' 
    exec(@s) 
    */ SELECT cast(cast(科目编号 as numeric(10,2)) as nvarchar(255))+' ' 转换后的别名 
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 
    'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions /********************** EXCEL导到远程SQL */
    insert OPENDATASOURCE( 
    'SQLOLEDB', 
    'Data Source=远程ip;User ID=sa;Password=密码' 
    ).库名.dbo.表名 (列名1,列名2) 
    SELECT 列名1,列名2 
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 
    'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions 
    /** 导入文本文件 */
    EXEC master..xp_cmdshell 'bcp dbname..tablename in c:\DT.txt -c -Sservername -Usa -Ppassword' /** 导出文本文件 */
    EXEC master..xp_cmdshell 'bcp dbname..tablename out c:\DT.txt -c -Sservername -Usa -Ppassword' 
    或 
    EXEC master..xp_cmdshell 'bcp "Select * from dbname..tablename" queryout c:\DT.txt -c -Sservername -Usa -Ppassword' /**导出到TXT文本,用逗号分开*/ 
    exec master..xp_cmdshell 'bcp "库名..表名" out "d:\tt.txt" -c -t ,-U sa -P password' 
    BULK INSERT 库名..表名 
    FROM 'c:\test.txt' 
    WITH ( 
    FIELDTERMINATOR = ';', 
    ROWTERMINATOR = '\n' 

    --/* dBase IV文件 
    select * from 
    OPENROWSET('MICROSOFT.JET.OLEDB.4.0' 
    ,'dBase IV;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客户资料4.dbf]') 
    --*/ --/* dBase III文件 
    select * from 
    OPENROWSET('MICROSOFT.JET.OLEDB.4.0' 
    ,'dBase III;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客户资料3.dbf]') 
    --*/ --/* FoxPro 数据库 
    select * from openrowset('MSDASQL', 
    'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\', 
    'select * from [aa.DBF]') 
    --*/ /**************导入DBF文件****************/ 
    select * from openrowset('MSDASQL', 
    'Driver=Microsoft Visual FoxPro Driver; 
    SourceDB=e:\VFP98\data; 
    SourceType=DBF', 
    'select * from customer where country != "USA" order by country') 
    go 
    /***************** 导出到DBF ************** 
    如果要导出数据到已经生成结构(即现存的)FOXPRO表中,可以直接用下面的SQL语句 */insert into openrowset('MSDASQL', 
    'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\', 
    'select * from [aa.DBF]') 
    select * from 表 /*说明: 
    SourceDB=c:\ 指定foxpro表所在的文件夹 
    aa.DBF 指定foxpro表的文件名. */
    /*************导出到Access********************/ 
    insert into openrowset('Microsoft.Jet.OLEDB.4.0', 
    'x:\A.mdb';'admin';'',A表) select * from 数据库名..B表 /*************导入Access********************/ 
    insert into B表 selet * from openrowset('Microsoft.Jet.OLEDB.4.0', 
    'x:\A.mdb';'admin';'',A表) /*文件名为参数*/  
    declare @fname varchar(20) 
    set @fname = 'd:\test.mdb' 
    exec('SELECT a.* FROM opendatasource(''Microsoft.Jet.OLEDB.4.0'', 
    '''+@fname+''';''admin'';'''', topics) as a ') SELECT * 
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 
    'Data Source="f:\northwind.mdb";Jet OLEDB:Database Password=123;User ID=Admin;Password=;')...产品