今天拿到一个200m左右的sql文件,打开以后发现里面的sql编写语言很奇怪:wj20021030 # 19871013 # [email protected]
lynched # river999 # [email protected]
ryanonjp # ryan585983 # [email protected]
longyutao_2008 # 79983132 # [email protected]
zyx05 # 7823849 # [email protected]
realya # 85903004 # [email protected]
kylinkuser # wwwnetmm # [email protected]
baozhiqiang # huajing20001 # [email protected]请问有没有办法把这些数据转化成sql数据库表呢?因为数据量太大,无法一个个把它写成sql插入表语言

解决方案 »

  1.   


    --'F:\test.sql' 为你的sql文件
    if object_id('test') is not null drop table test
    go
    CREATE TABLE test
    (
      val1 nvarchar(max),
      val2 nvarchar(max),
      val3 nvarchar(max)
    )
    go
    bulk insert test from 'F:\test.sql' 
    with(
    FIELDTERMINATOR='#',
    ROWTERMINATOR='\n'
    )
    go
    select * from test
    go
      

  2.   


    --资料
    /************************************************************************************************
                              乌龟代码
    *************************************************************************************************//******* 导出到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=;')...产品 --你的问题--你把文件导入到指定表里就好了
    bulk insert 导入到的表 from '你的文件地址' 
    with(
    fieldterminator='字段间的分隔符',--你这里为‘#’
    rowterminator='\n'
    )
      

  3.   


    我用bulk批量插入的时候出现了一下错误,请问这个要怎么解决呢?
    主要错误 0x80040E14,次要错误 25501
    > bulk insert data from 'D:\Temp\test.sql'
    with(
      fieldterminator='#',
      rowterminator='\n')
     [ 1,1,bulk ]
      

  4.   


    我在用这个方法的时候出现了一个奇怪的错误,无法插入数据
    主要错误 0x80040E14,次要错误 25501
    > bulk insert data from 'D:\Temp\test.sql'
    with(
    fieldterminator='#',
    rowterminator='\n')
    [ 1,1,bulk ]