500000000.0000 78.2978   99.8374
503436993.6722 78.4932   99.2287
506873987.3444 78.6419   98.6569
如果表中的数据像上面那样,数据之间相隔一个制表符,可以用BULK,程序如下:
BULK   INSERT   t1  
FROM   'c:\85070e2.prn'
WITH   (   
  FIRSTROW = 2,
          fieldterminator   =   '\t',  
          rowterminator   =  '\n'   

  但是如果第一列和第二列之间相隔3个空格,而第二和第三之间相隔5个空格
那应该怎么写SQL语句,把表中的数据导入SQL数据库中
是不是不能用bulk,bcp可不可以   不是很熟悉
请大家看看  谢谢

解决方案 »

  1.   

    有没有什么语句可以实现把空格不同的3列导入SQL数据库中,由于数据表的格式是.prn
    如果是execl就可以用:
    select * into 表 from 
    OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
    ,'Excel 5.0;HDR=YES;DATABASE=c:test.xls',sheet1$)

    所以应该可以用bulk,bcp
    实现吧  但是就是3列之间相隔不一样   比较麻烦
      

  2.   

     create table tt(a varchar(20),b varchar(20),c varchar(20)) BULK INSERT tt
        FROM 'd:\aaa.txt'
    WITH
    (
        FIELDTERMINATOR=' ',
        ROWTERMINATOR='\n',
        DATAFILETYPE='char'
    );
      

  3.   

    这种办法好像不行,由于表中的3列数据相隔不一样
     FIELDTERMINATOR=' ',这条语句就是每个字段之间空一格
    但是这个表中的数据列之间相隔不一样,是相隔3个空格,5个空格
      

  4.   

    恩 用bulk应该不行吧 
    就是想问还有别的方法没有啊
    不知道还有没有别的导入数据库的方法
      

  5.   

    我试了一下,可以把txt 先导入到excel 中,会有个操作,是“多个分隔符作为单个处理”然后还有个是选择
    列数据格式  为文本格式
      

  6.   

    没理解你的意思,是不是要先把txt导入到excel 中,再导入数据库中?
      

  7.   

    我想到一种方法:先把这张表导入数据库的一个表中,这个表就一个字段
    然后出这个表中读数据出来可以实现
    现在又遇到一个问题:就是怎么从第二行开始读啊 
    BULK   INSERT   qq1 
          FROM   'c:\17.prn' 
    WITH   (   
      FIRSTROW = 2           
    )

    这样好像就出错了  不知道怎么写?
      

  8.   

    BULK INSERT tt
        FROM 'd:\aaa.txt'
    WITH
    (
    FIRSTROW = 2 ,
        FIELDTERMINATOR=' ',
        ROWTERMINATOR='\n',
        DATAFILETYPE='char'
    );
     这个就可以的
      

  9.   

    BULK INSERT ttt
        FROM 'd:\aaa.txt'
    WITH
    (
    FIRSTROW = 2 ,
       -- FIELDTERMINATOR=' ',    -- 生成一个列
    ROWTERMINATOR='\n',
        DATAFILETYPE='char'
    );
     
      

  10.   

    貌似不行  现在只要把数据表导入数据库中就行了
    但是就是有表头去不到
    WITH
    (
        FIRSTROW = 2 ,
    ROWTERMINATOR='\n',
        DATAFILETYPE='char'
    );出现这种情况:(0 行受影响)
      

  11.   

    用bcp吧, 方便又好用! 举例如下供参考:Declare @cmd varchar(max), 
    @filename varchar(200),
    @Hostname varchar(20), 
    @Username varchar(20), 
    @Pass varchar(20)
    set @filename = 'Yourfilename'
    set @Hostname = 'YourHostname'
    set @Username = 'YourUsername'
    set @Pass = 'YourPassword'
    Create table YourTable_tmp(nStr varchar(max))
    set @cmd='bcp YourDabaseName..YourTable_tmp in "D:\YourFolder\'+@Filename+'" -r "\n" -c -S'+@Hostname+',1433 -U'+@Username+' -P'+@Pass
    Print @cmd
    exec master.dbo.xp_cmdshell @cmd
      

  12.   

    BCP也可以,但是现在我是要从第二行开始读,
    把标题去掉,由于数据是3列,每一列上面有对该列的注释,
    即每列的字段,但是现在我想去掉,然后导入数据库。
    我手动把第一列的字段去掉,然后用:
    Create   Table   qq(a   nvarchar(max)) 
    --将文件导入临时表中 
    BULK   INSERT   qq2 
    FROM   'c:\jianzh_cailiao1.prn'
    就可以实现把数据导入表qq中
    然后再从该表中读取数据填充到另外一张表中,这张表3列
    这样可以实现。
    就是郁闷的是怎么从第二行开始读数据,导入到表qq中
      

  13.   

    12楼的可以的,导入到一个列里,然后sql 里再分割
      

  14.   

    create table aaa( fre nvarchar(max))
    BULK INSERT aaa
        FROM 'c:\14.txt'
    WITH
    (
        FIRSTROW = 2 ,
       -- FIELDTERMINATOR=' ',    -- 生成一个列
    ROWTERMINATOR='\n',
        DATAFILETYPE='char'
    );
    (0 行受影响)
    这是我出的错误,
    对,你那种方法是可以,看了下数据,原来第一行的数据,就是字段和下面的数据不对齐,我改了下,把字段和下面的数据对齐就对了。
    BULK INSERT也是对那种数据是规范的可以一起导入,但是我的数据是仪器测出来的,规定格式,表格也比较多,想如果能用这种方法实现,那就可以用游标一起导入,就比较方便了。表头和下面不对齐  麻烦
      

  15.   

    没办法了 只有用matlab处理下  然后导入数据库