我正在尝试批量插入csv文件。 (所有Varchar字段)。
该文件包含以下行:
"10449";"135";"Programming";"2";"020";" ";"0";"4";"0";"4";"20151229";"20151228"
以特定行结束,以便检查我们是否导入了所有数据:
"DONE";"29/12/15";"12:15:03"
我已经使用bcp
生成了一个非XML格式的文件,如下所示:
10.0
12
1 SQLCHAR 0 50 ";" 1 Budgetnr Latin1_General_CI_AS
2 SQLCHAR 0 50 ";" 2 CustID Latin1_General_CI_AS
3 SQLCHAR 0 100 ";" 3 Subject Latin1_General_CI_AS
4 SQLCHAR 0 50 ";" 4 BNR2 Latin1_General_CI_AS
5 SQLCHAR 0 50 ";" 5 BNR3 Latin1_General_CI_AS
6 SQLCHAR 0 50 ";" 6 Type Latin1_General_CI_AS
7 SQLCHAR 0 50 ";" 7 BudgetX Latin1_General_CI_AS
8 SQLCHAR 0 50 ";" 8 BudgetY Latin1_General_CI_AS
9 SQLCHAR 0 50 ";" 9 TimeSpentX Latin1_General_CI_AS
10 SQLCHAR 0 50 ";" 10 TimeSpentY Latin1_General_CI_AS
11 SQLCHAR 0 50 ";" 11 DateStrX Latin1_General_CI_AS
12 SQLCHAR 0 50 "\r\n" 12 DateStrY Latin1_General_CI_AS
使用批量插入with (FORMATFILE = 'C:\Temp\formatFile2.fmt', firstrow = 3, rows_per_batch = 5000 )
我收到以下错误:
批量加载:数据文件中遇到意外的文件结尾。
据我所知,这是因为批量插入需要更多列,但无法找到任何列。
如何告诉MsSQL忽略任何与格式不匹配的行?
(我已经查看了其他选项,例如OPENROWSET
来计算导入前的行数,但我不允许更改公司服务器上的安全设置,此外,这只是一个丑陋的解决方案做一些像这样简单的事情。)
提前致谢!
答案 0 :(得分:0)
如果您知道文件中的行数,则可以使用with (FORMATFILE = 'C:\Temp\formatFile2.fmt', firstrow = 3, BATCHSIZE = number_of_rows-3 )
。否则,使用BATCHSIZE = 1
将有助于避免您的错误,但每一行都将插入单独的事务中。它将破坏BULK INSERT的优势。