无法从 CSV 文件批量插入到 SQL 表中



我似乎无法从通过FTP发送到我们的服务器的CSV文件在SQL表上运行批量插入。它运行没有错误,但改变0行。

如果我将数据复制到另一个文件中,它可以工作,但我需要能够自动完成此操作,而不会自己弄乱文件。打开它们,我能看到的唯一区别是,新文件的换行符是CRLF,而原始文件的换行符是LF。编码看起来都是一样的,所以我一定是错过了一些没有在其他类似的问题。

示例脚本:

BULK INSERT dbo.t_process_order_import
FROM 'C:RootProduct DataH888 ProcOrd.csv'
WITH
(
FIRSTROW = 2, -- as 1st one is header
FIELDTERMINATOR = '|',
ROWTERMINATOR = 'n',
TABLOCK
)

CSV数据示例:

ProcessOrder|ProductNumber|MaterialDescription|OrderQuantity|WorkCenter|StartDate|StartTime
001001101111|000000000000101111|TEST|40500.000 |CKET02|20201014|220000
001001221111|000000000000101111|TEST|14124.000 |GHFD02|20210225|032000

您需要使用ROWTERMINATOR='0x0a'
你的代码将变成:

BULK INSERT dbo.t_process_order_import
FROM 'C:RootProduct DataH888 ProcOrd.csv'
WITH
(
FIRSTROW = 2, -- as 1st one is header
FIELDTERMINATOR = '|',
ROWTERMINATOR = '0x0a',
TABLOCK
)

根据建议,我尝试改进我的来源:https://learn.microsoft.com/en-us/sql/relational-databases/import-export/specify-field-and-row-terminators-sql-server?view=sql-server-ver16

在段落"指定n作为批量导入的行结束符";

在这里报告问题的重要内容:

当您指定n作为批量导入的行结束符,或者隐式地使用默认行结束符时,bcp和bulk INSERT语句期望一个回车换行组合(CRLF)作为行结束符。如果源文件仅使用换行字符(LF)作为行结束符——这在Unix和Linux计算机上生成的文件中很常见——请使用十六进制符号来指定LF行结束符。例如,在BULK INSERT语句

最新更新