通过 SSMS 将平面文件导入 SQL Server 失败

问题描述 投票:0回答:9

使用 SSMS 导入平面文件选项将看似有效的平面文件(csv、文本等)导入 SQL Server 数据库时,会出现以下错误:

Microsoft SQL Server Management Studio

将数据插入表时出错。 (Microsoft.SqlServer.Import.Wizard)

将数据插入表时出错。 (Microsoft.SqlServer.Prose.Import)

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

目标表可能包含导入得很好的行。未导入的第一行似乎没有格式错误。

出了什么问题?

import ssms
9个回答
21
投票

检查以下内容:

  • 文件末尾没有空行(保留最后一行的行终止符不变) - 这似乎是最常见的问题
  • 没有意外的空白栏
  • 没有严重转义的引号

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

这让我在处理大文件时花费了数小时的时间。希望这可以节省一些人的时间。


15
投票

如果您导入的文件已打开,SSMS 将抛出此错误。关闭文件并重试。


2
投票

确保在创建平面文件时 IF 任何列中都有文本 (varchar) 值,请勿 选择以 逗号 "," 分隔的文件。相反,选择垂直线 "|" 或您认为 SURE 不能在这些值中的东西。逗号在 nvarchar 字段中非常常见。

我遇到了这个问题,其他答案的建议都没有帮助我! 我希望这可以节省一些时间,但我花了几个小时才弄清楚!!!


2
投票

其他这些都不适合我,但是这个却有用:

导入平面文件时,SSMS 会为您提供每列中数据类型的简要摘要。每当您看到 int 或 double 列中的 nvarchar 时,请将其更改为 int 或 double。并将所有 nvarchar 更改为 nvarchar(max)。这对我有用。


0
投票

我已经使用 csv 数据很长时间了。我刚开始做这份工作时也遇到过类似的问题,但作为新手,无法从异常中获取准确的故障。

在导入任何内容之前,您应该注意以下几点。

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

0
投票

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


0
投票

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

Image for clarity of where it is

您会收到一条错误消息,其中包含文件中存在问题的特定行,而不是“内存不足”


0
投票

我通过调整数据类型修复了这些错误。例如,将我的tinyint更改为smallint,将smallint更改为int,并将我的nvarchar()增加到合理的值,否则我将其设置为nvarchar(MAX)。由于大多数实际数据确实存在缺失值,因此我检查了所有列中允许的缺失值。然后一切都正常,并发出警告消息。


0
投票

确保运行 SQL 服务的帐户有权访问该文件和文件夹。简单的解决方案是将 csv 放入 SQL Server 默认备份位置的文件夹中。

© www.soinside.com 2019 - 2024. All rights reserved.