none
Bulk Insert命令如何跳过不规则行? RRS feed

  • 问题

  • Bulk Insert命令如何跳过不规则行?
    因为有这些“---”,所以导入数据库时总是提示最后一个字段内容过长,无法导入。能不能跳过这些“---”

    test.txt内容:

                                                                                                 
    --------------------------------------------------------------------------------------------                                                                                        
    AAAAAAA;;02;;2012-07-19;;132;;20
    BBBBBB;;02;;2012-01-11;;139;;200
    CCCCCC;;02;;2012-03-17;;139;;200
                                                                                                 
    --------------------------------------------------------------------------------------------                                                                                        
    DDDDDD;;02;;2012-05-01;;132;;20
    EEEEEE;;02;;2012-05-12;;139;;200
    FFFFFF;;01;;2012-07-13;;127;;0
    DDDDDD;;02;;2012-05-01;;132;;200
    EEEEEE;;02;;2012-05-12;;139;;20
                                                                                                 
    --------------------------------------------------------------------------------------------                                                                                        
    GGGGGG;;02;;2012-08-02;;139;;20
    DDDDDD;;02;;2012-05-01;;132;;200
    EEEEEE;;02;;2012-05-12;;139;;20
    DDDDDD;;02;;2012-05-01;;132;;200
    EEEEEE;;02;;2012-05-12;;139;;200
    
    已选择12134300行。
    
    
    private void button1_Click(object sender, EventArgs e)
            {
                using (SqlConnection conn = new SqlConnection(SqlHelper.ConnectionStringLocalTransaction))
                {
                    DateTime dt = DateTime.Now;
                    SqlCommand cmd = conn.CreateCommand();
                    cmd.CommandText = "bulk insert asking_wf_cl from 'test.txt' with(FIELDTERMINATOR=';;',ROWTERMINATOR='\r\n',FIRSTROW=3,TABLOCK)";
                    conn.Open();
                    try
                    {
                        cmd.ExecuteNonQuery();
                        label1.Text = "导入成功! 开始时间:" + dt + "     完成时间:" + DateTime.Now;
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.ToString());
                    }
                }
            }


    2012年8月10日 7:04

全部回复

  • 或許你可以參考這篇帖子。

    http://social.msdn.microsoft.com/Forums/en/transactsql/thread/38ba288b-b142-4b36-bdf7-8fcbb807b2ad


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年8月10日 7:36
  • 谢谢TerryChuang热心回复。

    我看了一下,感觉FORMATFILE= 'E:\Test\Import.fmt'是不是有用,就是使用fmt文件格式我的txt文件?

    2012年8月10日 8:15
  • 我还没实际试过,所以不确定指定文件格式是否可行,但我查了一下网路上大家的做法,似乎都是建议先整个汇进去SQL SERVER,再透过T-SQL去处理,可能会比较快一点。

    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年8月10日 8:56
  • 我现在导不进去SQL SERVER。老是出错。

    fmt是怎么创建的?我直接复制过来改的好像不行啊!

    10.0
     
    6
     
    1       SQLCHAR             0       200     ";;"      1     tm1             SQL_Latin1_General_Cp437_CI_AS_KI_WI
     
    2       SQLCHAR             0       200     ";;"      2     tm2             SQL_Latin1_General_Cp437_CI_AS_KI_WI
     
    3       SQLCHAR             0       200     ";;"      3     tm3             SQL_Latin1_General_Cp437_CI_AS_KI_WI
     
    4       SQLCHAR             0       200     ";;"      4     tm4             SQL_Latin1_General_Cp437_CI_AS_KI_WI
     
    5       SQLCHAR             0       200     ";;"      5     tm5             SQL_Latin1_General_Cp437_CI_AS_KI_WI
     
    6       SQLCHAR             0       1000     "\r\n"   6     tm6             SQL_Latin1_General_Cp437_CI_AS_KI_WI
     

    2012年8月10日 10:24
  • 我想我还是先用批处理文件把txt中的“空行”、“--------”、“已选择12134300行。”删除吧。

    下面这个可以把“空行”去掉,有哪位帮忙看看,如何把“--------”和“已选择12134300行。”去掉?!

    @echo off
    for %%a in (test.txt) do (cls&echo  正在处理 %%a
    findstr/rvc:"^ *$" "%%a">"1%%a"
    move "1%%a" "%%a")
    cls&echo ok



    • 已编辑 hkstb 2012年8月12日 8:25 写错了
    2012年8月12日 7:53