使用windows

时间:2015-09-14 14:59:27

标签: sql-server bcp

我正在尝试使用格式文件从文件中将数据导入sql server表。

实际上我有2个数据库:生产数据库和本地数据库

我想在本地数据库中插入生产数据库的表格出货单的一些行。表格出货单在2个数据库中既没有相同的列也没有相同的列顺序。

这就是为什么我使用文件格式来执行我的bcp。

我使用以下命令生成包含我想要插入本地数据库的行的文件

bcp "SELECT  shipper_id,Shipper_name FROM ProductionDatabase.dbo.shipper where shipper_id >5" queryout shipper.txt -c -T

它有效!!

然后使用以下命令生成带有本地表的模式的格式文件

bcp LocalDatabase.dbo.shipper nul -T -n -f shipper-n.fmt

它有效!!

不幸的是,当我尝试在我的本地表中插入文件数据时 以下命令:

bcp LocalDatabase.dbo.shipper in shipper.txt -T -f shipper-n.fmt

它会产生以下错误(翻译自法语)

任何人都可以知道问题是什么,我怎样才能解决它。

提前致谢

unexpected end of file encountered in the bcp data file 

1 个答案:

答案 0 :(得分:0)

您的格式文件与数据不匹配。您正在使用-c

导出文本
bcp "SELECT  shipper_id,Shipper_name FROM ProductionDatabase.dbo.shipper where shipper_id >5" queryout shipper.txt -c -T

但您的格式文件是使用-n

为本机(二进制)数据制作的
bcp LocalDatabase.dbo.shipper nul -T -n -f shipper-n.fmt

将本地(我的推荐)或两者都导出为文本。要防止出现此错误,请同时导出数据文件和格式文件,只需将-f shipper.fmt添加到导出

即可

文字版:

bcp "SELECT  shipper_id,Shipper_name FROM ProductionDatabase.dbo.shipper where shipper_id >5" queryout shipper.txt -c -T -f shipper.fmt

原生版本:

bcp "SELECT  shipper_id,Shipper_name FROM ProductionDatabase.dbo.shipper where shipper_id >5" queryout shipper.txt -n -T -f shipper.fmt

PS。由于您可以遇到数据中存在记录或行分隔符的情况,因此您应该选择数据中不存在的字符序列作为字段-t"\t|\t"(Tab-Pipe-Tab)的分隔符。行的{1}}(Tab-Pipe-Newline)。如果将format语句与导出组合在一起,则数据和格式文件将匹配,您可以自由地在单个命令行上更改分隔符。

在命令行上的-r"\t|\n"-n之后指定分隔符