有关在sql-server中批量插入的咨询

时间:2018-10-03 08:49:10

标签: c# sql-server bulkinsert

我有需要插入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列,则崩溃

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

2 个答案:

答案 0 :(得分:0)

批量插入不是很灵活。一种解决方案是将这些列加载到仅包含一个varchar列的表中,然后在以后进行拆分/解析。

答案 1 :(得分:0)

如果表与文件不匹配,请在该表上创建一个视图,然后将其插入视图

-- 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')