我正在尝试使用格式文件从文件中将数据导入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
答案 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
之后指定分隔符