【问题标题】:Consultation about bulk insert in sql-server关于sql-server中批量插入的咨询
【发布时间】:2018-10-03 08:49:09
【问题描述】:

我有需要插入 sql-server 的 C# WinForm 程序。

文件是文本(制表符分隔)。

有时它包含(3 列):

BAR    DES     MAK
111    aaa     222
333    bbb     333
.
.

有时它包含(5 列):

BAR    DES     MAK    PRI    MLA
111    aaa     222    1.1    2.2
333    bbb     333    3.3    4.4
.
.

sql-server 表是 CatTbl:

BAR nvarchar(250)
DES nvarchar(250)
MAK nvarchar(250)
PRI nvarchar(250)
MLA nvarchar(250)

我尝试这样插入:

SQL = @"BULK INSERT CatTbl FROM 'd:\TEST\TEST.txt' WITH (CODEPAGE=1255,FIELDTERMINATOR = '\t')";
Cmd = new SqlCommand(SQL, Conn);
Cmd.ExecuteNonQuery();
Cmd.Dispose();

如果有 5 列效果很好但是如果有 3 列它会崩溃

我搜索并没有找到解决方案。有人有想法吗?

【问题讨论】:

  • 重复 msdn post。将同一个问题单独发布到多个论坛只是浪费精力和业力。
  • 一个可能没用的旁注:请记住,BulkInsert 会强制取消选中您的 ForeignKeys(如果有的话)。

标签: c# sql-server bulkinsert


【解决方案1】:

BULK INSERT 不是很灵活。一种解决方案是将列加载到只有一个 varchar 列的表中,然后稍后进行拆分/解析。

【讨论】:

    【解决方案2】:

    如果表与文件不匹配,则在匹配的表上创建一个视图,然后插入到视图中

    -- Run this once in SSMS to create the view
    CREATE VIEW MyView AS SELECT BAR,DES,MAK FROM CatTbl;
    
    -- If your file has three columns, use this
    BULK INSERT MyView FROM 'd:\TEST\TEST.txt' WITH (CODEPAGE=1255,FIELDTERMINATOR = '\t')
    
    -- If your file has five columns, use this
    BULK INSERT CatTbl FROM 'd:\TEST\TEST.txt' WITH (CODEPAGE=1255,FIELDTERMINATOR = '\t')
    

    【讨论】:

      猜你喜欢
      • 2010-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多