SQL Server 2014:无法使用bcp和格式化文件将任何数据导入LocalDB(零行,无错误)



我正在尝试使用非XML bcp格式的文件将数据导入Win7 64位上的LocalDB。最简单的用例。

OS Name:   Microsoft Windows 7 Home Premium
OS Version: 6.1.7601 Service Pack 1 Build 7601
LocalDB version: Microsoft SQL Server 2014 (12.0.2000.8)
BCP version: 12.0.2000.8

基本上,所有东西的最新版本都是几天前从Microsoft SQL Server 2014网站下载的。

我可以通过bcp连接到LocalDB实例来创建一个格式文件,但当尝试使用它重新导入尽可能简单的数据时,生成的格式文件不起作用。无论我尝试什么,bcp都会加载零行,以静默方式失败,并且不会将错误信息打印到指定的错误文件中。

/* create the table */
use try_db;
create table try(num integer);
/* create the format file based on the table. */
bcp try_db.dbo.TRY format nul -n -T -f TRY.fmt -S (localdb)default_db
/* above command creates a file TRY.fmt with the following contents */
12.0
1
1  SQLINT  1  4  ""  1  num  ""
/* then I create a file data.txt, with just the number 99 in it, followed by a Windows line terminator (rn) */
/* then try importing the file into the table */
bcp try_db.dbo.TRY in data.txt -f TRY.fmt -T -S (localdb)default_db -e errors.txt

结果:

Starting copy...
0 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total     : 1

errors.txt中没有任何内容。我只是无法使用bcp导入任何使用格式文件的内容!

我还没有在SQL Server本身中尝试过(只在LocalDB中尝试过),但对于像这样简单的东西来说,这应该无关紧要。

我尝试编辑TRY.fmt文件行如下:

1  SQLINT  1  4  "rn"  1  num  ""

但这也无济于事。

我可以使用-c而不是-f成功导入:

bcp try_db.dbo.TRY in data.txt -c -T -S (localdb)default_db -e errors.txt

关于(a)为什么bcp不使用格式文件导入,以及(b)为什么它不向指定的错误文件打印错误,有什么想法吗?一定有什么很简单的事情我做错了。

请不要建议使用BULK INSERT或SSIS(等)。bcp应该按照文档的要求工作!

格式文件描述的是源数据,而不是目标数据。当您使用-cdatafiletype='char'时,您的输入数据类型必须是SQLCHAR。本机数据类型仅在使用-ndatafiletype='native'时有效。本机格式的源文件总是二进制的,因此bcp需要知道每个字段的数据类型,以便读取正确的字节数并正确解释它们。

我想我找到了答案。bcp格式规范无法正常工作!似乎即使对于数字或日期时间导入字段,也必须将"SQLCHAR"指定为.fmt文件中的数据类型。任何使用"bcp格式"生成的实际.fmt文件的尝试都是没有希望的——如果它返回了SQLINT或SQLDATE行,则必须将它们替换为SQLCHAR才能正常工作,即使数据库列实际上是数字或日期/日期时间类型。

真糟糕!

最新更新