BULK INSERT在最后一行失败

3
我正在使用SQL Server批量选项导入CSV文件,以下是我的SQL输入内容。
MAXERRORS = 1000000,
CODEPAGE = 1251,
FIELDTERMINATOR = '~%',
ROWTERMINATOR = '0x0a',
ERRORFILE = 'C:\MyFile_BadData.log'

我的问题是BULK INSERT无法加载最后一行的数据。

另外请注意,SQL批量选项没有报告任何错误。

如果我在文件中添加一个空的换行符,则加载工作正常,没有任何问题。

但是我担心我不能修改CSV文件,请提供您宝贵的建议(如果有)。


1
https://dev59.com/aZzha4cB1Zd3GeqPI7K0 - Richard Hansell
谁生成了这个文件,给你提供了一个无效的文件。 - Nick.McDermaid
3个回答

4

当最后一行没有以行终止符结束时,会出现这种情况。请确保最后一行以行终止符结束,然后最后一行将被导入。

如果您无法更改生成CSV的导出例程,请使用PowerShell或其他工具向CSV文件添加行终止符。如果您无法更改原始文件,请将其复制到可以更改的位置(在PowerShell脚本中包括该位置)。


0
如果您在Unix变种上,也可以使用此方法将内容添加到文件中,无需手动编辑。
sed -i '' -e '$a\' fname.csv

请注意,此操作仅会在没有换行符的情况下添加一个换行符。因此,多次运行不会影响已经具有尾随换行符的文件。

0

没错!文件中的最后一个字符必须是某种特殊字符;换行符、空格等。你可以简单地删除最后一行并进行导入吗?如果需要自动化解决方案,可以创建一个小的C#应用程序来打开文件,删除最后一行,然后保存文件。然后,运行您的导入过程。这一切都可以使用Windows任务计划程序进行控制,因此即使您远离计算机,也可以将其作为隔夜工作运行。

https://www.digitalcitizen.life/how-create-task-basic-task-wizard


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接