通过SSMS导入扁平文件到SQL Server失败

14

使用SSMS导入平面文件(csv、txt等)到SQL Server数据库时,即使该文件看起来是有效的,也会出现以下错误:

Microsoft SQL Server Management Studio

插入表数据时发生错误。(Microsoft.SqlServer.Import.Wizard)

插入表数据时发生错误。(Microsoft.SqlServer.Prose.Import)

对象引用未设置为对象的实例。(Microsoft.SqlServer.Prose.Import)

目标表中可能包含已成功导入的行。似乎第一行未导入的行没有格式错误。

出了什么问题?

9个回答

21

请检查以下内容:

  • 文件末尾没有空行(最后一行的终止符保留) - 这似乎是最常见的问题
  • 没有意外的空列
  • 没有错误转义引号

看起来导入过程是逐块加载行的。这意味着,最后成功加载的块后面的行可能看起来没有错误。您需要查看属于失败块的后续行,以找到有问题的行。

当处理大文件时,我因此浪费了数个小时。希望这能为他人节省时间。


2
对我没用。我的末尾只有一行空白行。 - Daniel Jackson
2
我删除了所有末尾的空行,它起作用了!谢谢!! - Jeremiah Cooper
2
@DanielJackson 我也遇到了同样的问题。我正在处理一个转换成文本的Excel文件。工作表里有额外的“空白”列。当我移除它们时,导入成功了。 - DataWriter
2
我在一个文件中遇到了未正确转义的双引号导致这种情况发生。 - user12861
1
@user12861,我已经将你的反馈融入到答案中了。 - Andrew
1
@DataWriter,我已经将你的反馈融入到答案中。 - Andrew

15
如果要导入的文件已经打开,SSMS 将会抛出这个错误。请关闭该文件并重试。

3
哇,谢谢,就是这样了。像这样的事情显示一个悲伤的错误。 - trpt4him
2
非常感谢,这实际上是导致问题的原因。在关闭目标文件后,它就像魔术般地运行了。 - Masaba James Moses

2
请注意,在创建您的平面文件时,如果您的任何列中有文本(varchar)值,请不要选择将您的文件设置为逗号","分隔符。相反,请选择竖线"|"或其他您确定不能在这些值中出现的字符。逗号在nvarchar字段中非常常见。
我遇到了这个问题,其他答案的建议都没有帮助我!我希望这可以节省别人的时间,我花了几个小时才找出来!!!

2

这些方法都没能解决我的问题,但是下面的方法有效:

当你导入一个扁平文件时,SSMS会给你每列数据类型的简要概述。如果你看到一个nvarchar在int或double列中,将其更改为int或double。并将所有nvarchar更改为nvarchar(max)。这对我起了作用。


0
在考虑了所有建议之后,如果仍然有人遇到问题,请检查列的数据类型长度。我花了几个小时才弄清楚这一点,但将nvarchar长度从(50)增加到(100)对我有用。

0

我已经长时间使用csv数据了。当我刚开始这份工作时,我遇到了类似的问题,但是作为一个新手,我无法从异常中获得精确的错误信息。

在导入任何内容之前,请注意以下几点:

  1. 您的csv文件不能在任何软件中打开,例如Excel。
  2. 您的csv文件单元格不应包含逗号或引号符号。
  3. 您的数据末尾没有不必要的空白。
  4. 不要使用保留术语作为数据。在Excel中,打开您的文件并将其另存为新文件。

0

对我有用的一件事:您可以在“修改列”中将错误范围更改为1

图像以清晰地显示其位置

您会收到一个带有文件中有问题的特定行的错误消息,而不是“内存不足”


0

我通过调整数据类型来解决了这些错误。例如,将我的tinyint更改为smallint,smallint更改为int,并将我的nvarchar()增加到合理的值,否则我将其设置为nvarchar(MAX)。由于大多数现实生活中的数据都存在缺失值,我检查了所有列中允许缺失值的情况。然后一切正常,只是出现了警告信息。


0
确保运行SQL服务的帐户具有对文件和文件夹的权限。简单的解决方法是将CSV文件放在SQL服务器默认备份位置的文件夹中。

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