使用 SSMS 导入平面文件选项将看似有效的平面文件(csv、文本等)导入 SQL Server 数据库时,会出现以下错误:
Microsoft SQL Server Management Studio
将数据插入表时出错。 (Microsoft.SqlServer.Import.Wizard)
将数据插入表时出错。 (Microsoft.SqlServer.Prose.Import)
未将对象引用设置为对象的实例。 (Microsoft.SqlServer.Prose.Import)
目标表可能包含导入得很好的行。未导入的第一行似乎没有格式错误。
出了什么问题?
检查以下内容:
看起来导入过程会分块加载行。这意味着最后成功加载的块后面的行可能看起来没有错误。您需要查看作为失败块一部分的后续行,以找到有问题的行。
这让我在处理大文件时花费了数小时的时间。希望这可以节省一些人的时间。
如果您导入的文件已打开,SSMS 将抛出此错误。关闭文件并重试。
确保在创建平面文件时 IF 任何列中都有文本 (varchar) 值,请勿 选择以 逗号 "," 分隔的文件。相反,选择垂直线 "|" 或您认为 SURE 不能在这些值中的东西。逗号在 nvarchar 字段中非常常见。
我遇到了这个问题,其他答案的建议都没有帮助我! 我希望这可以节省一些时间,但我花了几个小时才弄清楚!!!
其他这些都不适合我,但是这个却有用:
导入平面文件时,SSMS 会为您提供每列中数据类型的简要摘要。每当您看到 int 或 double 列中的 nvarchar 时,请将其更改为 int 或 double。并将所有 nvarchar 更改为 nvarchar(max)。这对我有用。
我已经使用 csv 数据很长时间了。我刚开始做这份工作时也遇到过类似的问题,但作为新手,无法从异常中获取准确的故障。
在导入任何内容之前,您应该注意以下几点。
考虑所有建议后,如果有人仍然遇到问题,请检查列的数据类型的长度。我花了几个小时才弄清楚这一点,但将 nvarchar 长度从 (50) 增加到 (100) 对我来说很有效。
我通过调整数据类型修复了这些错误。例如,将我的tinyint更改为smallint,将smallint更改为int,并将我的nvarchar()增加到合理的值,否则我将其设置为nvarchar(MAX)。由于大多数实际数据确实存在缺失值,因此我检查了所有列中允许的缺失值。然后一切都正常,并发出警告消息。
确保运行 SQL 服务的帐户有权访问该文件和文件夹。简单的解决方案是将 csv 放入 SQL Server 默认备份位置的文件夹中。