【问题标题】:Microsoft SQL Server fails to load a simple CSV fileMicrosoft SQL Server 无法加载简单的 CSV 文件
【发布时间】:2019-03-31 06:46:58
【问题描述】:

我是这样设置架构的:

sqlcmd -S localhost -U <user> -P <pw> -d <relation> -Q "CREATE TABLE vehicle_reg (record_type varchar, vin varchar, registration_class varchar, city varchar, state varchar, zip int, county varchar, model_year int, make varchar, body_type varchar, fuel varchar, unladen_weight int, max_gross_weight int, passengers int, reg_valid_date date, reg_expiration_date date, color varchar, scofflaw varchar, suspension varchar, revocation varchar);"

为了测试这一点,我的 CSV 文件正好包含 1 行:

VEH ,5NMSGDAB5AH372379,PAS,ALEXANDRIA BAY ,NY,13607,JEFFERSON   ,2010,HYUND,SUBN,GAS     ,3875,,,06/26/2017,07/06/2019,WH   ,N,N,N

这是我发出bcp 命令的方式:

bcp &lt;db&gt; in one-line.csv -S localhost -U &lt;user&gt; -P &lt;pw&gt; -d &lt;relation&gt; -n -t','

但它根本不会复制任何东西:

Starting copy...

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

如果我改为提供完整的 CSV 文件,我会得到 Error = [Microsoft][ODBC Driver 17 for SQL Server]Unexpected EOF encountered in BCP data-file

有什么提示吗?

【问题讨论】:

  • 文件是否有行终止符 - 尝试添加一个空行。另外,您是否尝试使用向导加载文件以检查它是否加载?
  • 它没有空行(wc -l 给出 1)但我手动验证它确实有一个正确的 Unix 行终止符 \n。我不确定“向导”是什么。
  • 在 MS SQL Server Management Studio 中有一个向导来传输数据。此外,错误消息很清楚 - 它不喜欢 EOF 文件标记;尝试不同的行尾或插入一个空行。
  • @Covi 我很确定 MS SQL 需要一个 Windows 换行符 (\r\n)
  • 文档说你需要使用-r '0x0A' 来做你想做的事。 docs.microsoft.com/en-us/sql/relational-databases/import-export/…

标签: sql-server database csv bcp


【解决方案1】:

如果您的文件包含以 \n 结尾的行,那么您需要告诉 BCP 查找 \n 作为行终止符。这是通过 -r 选项完成的。当不包含 -r 选项时,BCP 将默认为 \r\n 行终止符(回车和换行)。在您的 1 行测试文件中,BCP 找不到以 \r\n 结尾的行,因此不加载任何内容。只需确保行终止符在文件中的内容与 BCP 正在查找的内容之间匹配即可。

【讨论】:

    猜你喜欢
    • 2018-07-22
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    相关资源
    最近更新 更多