如何bulk insert 的ms sql server呢

解决方案 »

  1.   

    不明白楼主要问什么
    参考一下:
    BULK INSERT dbname..tablename 
    FROM 'd:\a.txt' 
    WITH ( 
        FIELDTERMINATOR = ',',   -- 分隔符
        ROWTERMINATOR ='\n'      -- 换行符
    )
      

  2.   

    就是 ROWTERMINATOR ="????"  -- 换行符
    这个地方(???)不是换行符,而是在文本里根本看不到这个结束符,但是在ultraEdit的16进制看到这个换行的位置的Ascii为0D 0A
    这个文件是由unix操作系统从infomix导出来的,用vi可以看到"$"这样的行结束符,但在windows的记事本里看不到这个行结束符请大侠发贴呀决不在乎分数
      

  3.   

    今天也遇到这种问题,为了以后有人可以查到所以回复到这里。
    如果数据从Informix(我的数据就是)来的文本文件,里面的换行符是/n,但用Bulk Insert时/n还是被当作了/r/n来看待,所以直接用ROWTERMINATOR = '/n'是不成的,那么就可以间接的使用,换行符的编码是char(10),这样,1、在程序中可以改为(我用的delphi,其他也差不多):'Bulk Inser ... ROWTERMINATOR = ''' + char(10) + ''''。2、另外在网上查的也有人用了fmt模版,这样也可以,但是这样做不如直接去bcp了。
    3、最后我还有个问题,想把这个改成存储过程,这样做的话就省不少事,但是没有成功,希望有高手能够看看,我大概思路如下:
    CREATE PROCEDURE BulkInsert AS
    DECLARE @lf CHAR(1)
    DECLARE @cmd CHAR(255)
    SET @RowTerm = CHAR(10)
    SET @cmd = 'bulk insert MyDB.dbo.MyTB FROM ''C:\20070705.txt'' WITH(FIELDTERMINATOR = ''|'',ROWTERMINATOR ='''+ @RowTerm +''')';
    exec @cmd
    GO
    那个CHAR(10)是不能当参数传的,只能放到存储过程里面,可惜这样弄还是过不去,希望有高手来把这个处理了吧
      

  4.   

    DECLARE @bulk_cmd varchar(1000);
    SET @bulk_cmd = 'BULK INSERT CallLog.TelstkTemp01 FROM ''D:\Program\litz\data\历史.txt'' with (FIELDTERMINATOR =''\t'', ROWTERMINATOR = '''+CHAR(10)+''')';
    EXEC(@bulk_cmd);
    这样就可以了...