bcp with format file using command dos in windows

你离开我真会死。 提交于 2019-12-12 02:44:03

问题


I'am trying to import data into sql server table from a file using a format file.

In fact I have 2 databases: a production database and a local database

I want to insert some row of the table shipper of the production database in the local one. The table shipper don't have neither the same columns nor the same order of column in the 2 databases.

That's why I used a file format to do my bcp.

I generate file containing the rows I want to insert in my local database with the following commande

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

It works !!

I generate then the format file with the schema of my local table with the following commande

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

It works !!

Unfortunately when I tried to insert the file data in my local table with the following commande:

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

it generates the following error (translated from french)

Can anyone know what is the problem and how can I get arround it.

Thanks in advance

unexpected end of file encountered in the bcp data file 

回答1:


Your format file does not match the data. You are exporting using text using -c

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

But your format file is made for native (binary) data using -n

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

Either export both as native (my recommendation), or both as text. To prevent this error, export the data file and the format file at the same time, simply add -f shipper.fmt to your export

Text version:

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

or

Native Version:

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

PS. Since you can run into scenarios where your record or row delimiters exist in the data you should pick a character sequence that does not exist in your data as a separator for instance -t"\t|\t" (Tab-Pipe-Tab) for fields and -r"\t|\n" (Tab-Pipe-Newline) for rows. If you combine the format statement with the export the data and the format file will match and you have the freedom to change the separators on a single command line.

Specify separators after the -n or -c on the command line



来源:https://stackoverflow.com/questions/32567993/bcp-with-format-file-using-command-dos-in-windows

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!