【问题标题】:Encoding issue of arguments for BULK INSERT via SSMS通过 SSMS 对 BULK INSERT 的参数进行编码问题
【发布时间】:2014-09-17 04:05:36
【问题描述】:

所以我在尝试加载一些数据时偶然发现了一个有趣的问题。本质上,我有一些包含数据的文件,我试图将这些文件批量插入到带有 varchar 列的表中,以便于导入。该文件以制表符分隔,以 CRLF 作为行终止符。

由于某种原因,当我从自己的 PC 写入/复制和粘贴 BULK INSERT 命令时,命令失败。它提供了一个错误说明

Bulk load: DataFileType was incorrectly specified as widechar.  DataFileType will be assumed to be char because the data file does not have a Unicode signature.

然后它说:

Bulk load failed. The column is too long in the data file for row 1, column 7.  Verify that the field terminator and row terminator are specified correctly.

命令如下:

BULK INSERT <table>
 FROM '<filepath>'
  WITH 
   (
  DATAFILETYPE = 'widechar',
  FIELDTERMINATOR = ' ',
  ROWTERMINATOR = '
 '
  );

现在,没有意义的部分是,在不更改任何代码的情况下,我的同事能够完美地运行和加载表。没有警告消息,没有失败,什么都没有。

当我在 Notepad++ 中查看启用了所有字符符号的命令时,它似乎是正确的,以 CRLF 作为行尾和箭头来表示列之间的制表符。

我唯一能想到的就是我的 SQL Server Management Studio 文本编辑器的编码一定会弄乱字段/行终止符参数并导致批量插入命令失败。

有人有什么好主意吗?

【问题讨论】:

    标签: sql character-encoding sql-server-2008-r2 bulkinsert


    【解决方案1】:

    原来我同事的电脑出了问题,并且在编码方面做了一些奇怪的事情,使他能够正确粘贴 LF。

    我能够通过创建一些动态 sql 来执行批量插入,并将由 CHAR(10) 生成的行终止符连接到命令的其余部分来解决我的问题。

    CHAR(10) 是换行符的 ascii 表示,它是我拥有的文件中的行终止符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-01
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-07
      • 1970-01-01
      相关资源
      最近更新 更多