我有一个 txt 格式的数据文件,我曾经在以下命令中使用 Bulk Insert 加载它:
Bulk insert [table1]
FROM 'data.txt'
WITH
(
FIELDTERMINATOR ='|',
ROWTERMINATOR ='0x0a',
)
代码运行良好。但是,当我尝试使用带有批量插入的格式文件来加载文件时,在为最后一行指定字段终止符时遇到了一些问题。
这是格式文件中最后一行的规范:
21 SQLCHAR 0 20 "0x0a" 21 misc_costs SQL_Latin1_General_CP1_CI_AS
使用“0x0a”作为终止符,我收到以下错误:
第 2 行第 1 列 (var1) 的批量加载数据转换错误(截断)。
用“\n”可以加载数据,但是用“|” 也加载到最后一列。例如,我得到“0.5|” 而不是“0.5”。
"|\n","0x0a","|0x0a",'\r\n' 返回与 "|" 相同的错误
第 2 行第 1 列 (var1) 的批量加载数据转换错误(截断)。
我正在使用 sql-server 2016,Windows 10 64 位。
有人能帮忙吗?在此先感谢您的帮助!
杰森
经过一整天的换行/十六进制代码,我终于发现我的问题是由于格式文件中缺少列引起的。该数据集对我来说是新的,我认为它有 21 行,而实际上它有 22 行。这就是为什么sql server一直在加载最后一个“|” 从数据文件。
这是其他可能对使用不同于 Windows 的行终止符的 UNIX 系统加载数据文件感兴趣的人的参考,有以下三种方法:
在尝试这些方法之前,请使用记事本显示所有控制字符以确认文本文件使用的控制字符。
如果这些方法都不适合您,您可能会遇到除换行符/行终止符之外的一些问题。