SQL Server批量插入 - "无法批量加载。格式文件的未知版本"

时间:2016-11-18 10:15:10

标签: c# sql-server

更新:我使用的是SQL Server 12.0.2269.0版,但是BCP为版本13生成了一个脚本。更改此版本并删除了错误,但命令无论如何都无法正常工作。结果为(0 row(s) affected)

我收到以下错误:

  

Msg 4820,Level 16,State 1,Line 1
  无法批量加载。格式文件的未知版本" file.fmt"。

从此批量插入命令:

BULK INSERT Hello
FROM 'C:\data.csv'
WITH (
    FORMATFILE='C:\file.fmt'
)

要生成我遵循本指南的.fmt文件:

https://msdn.microsoft.com/en-us/library/ms191516.aspx

file.fmt,底部为空行:

13.0
20
1       SQLCHAR             0       11      "\t"     1     person_nr                                  Finnish_Swedish_CI_AS
2       SQLCHAR             0       50      "\t"     2     fornamn                                    Finnish_Swedish_CI_AS
3       SQLCHAR             0       50      "\t"     3     efternamn                                  Finnish_Swedish_CI_AS
4       SQLCHAR             0       50      "\t"     4     adress                                     Finnish_Swedish_CI_AS
5       SQLCHAR             0       50      "\t"     5     co_adress                                  Finnish_Swedish_CI_AS
6       SQLCHAR             0       10      "\t"     6     postnr                                     Finnish_Swedish_CI_AS
7       SQLCHAR             0       50      "\t"     7     postadress                                 Finnish_Swedish_CI_AS
8       SQLCHAR             0       12      "\t"     8     bevakad                                    ""
9       SQLCHAR             0       41      "\t"     9     limit                                      ""
10      SQLCHAR             0       24      "\t"     10    upplysning_datum                           ""

生成格式文件的BCP命令:

bcp [Database].[dbo].[Hello] format nul -T -n -f "C:\file.fmt"

bcp [Database].[dbo].[Hello] format nul -c -f "C:\file.fmt" -T

还有其他人经历过这个吗?

2 个答案:

答案 0 :(得分:2)

是的,我已经体验过这一点。

您的简单解决方案是编辑格式文件并将13.0更改为12.0

我在桌面上安装了最新的SSMS并运行了bcp导出脚本时遇到了这个问题。我得到了与你完全相同的错误。我的格式文件有14.0,我的SQL Server数据库是13.0(2016)。只需编辑格式文件中的版本号就可以解决加载错误。

注意:我在命令中添加了 -V130 参数,我不再有这个问题了。您可能需要将 -V120 添加到bcp导出中。

答案 1 :(得分:1)

  1. 将格式文件从.FMT重命名为.txt
  2. 在文件末尾的空白处添加一个空行
  3. 在查询中将文件扩展名从.FMT更改为.txt并运行它:

格式文件基本上只是一个文件,无论扩展名如何,都可以将一些信息传递给SQL。

我仍然不确定为什么总是这样。