将平面文件导入 SQL Server - 是否有某种大小/单元格限制?

问题描述

有人可以确认/否认在将平面文件导入 sql Server 时是否存在单元格限制(或任何其他类型的大小限制)?

我最近一直很恼火,导入的 csv 文件不断返回错误“无法转换为 nvarchar,数据将被截断”......显然该错误消息没有帮助,所以我将错误报告放在,并注意到它经常在第 300 行和第 330 行之间出错......无论文件如何。

我必须放入 20 个文件并得到相同的错误,总是在大致相同的行范围内。我已经手动检查了每个文件 - 在任何文件的该单元格范围内没有明显的错误消息原因。

我的文件不大(

我尝试将文件一分为二,所以每个文件大约有 250 行,而且 - 就像魔术一样 - 它们可以毫无问题地导入。

在我更改生成这些文件的过程之前,有人可以确认我的怀疑是否正确吗? (或建议其他原因?)

编辑 - 使用 sql Server 15.0 中内置的“导入平面文件”向导。逗号分隔;双引号;不确定在字符串中是否使用单引号,因为文本是西班牙语,并且不使用撇号!

编辑 2 - 现在最好关闭这个。许多逻辑建议反映了我一直在做的故障排除。这至少让人放心,这不是明显的疏忽。

解决方法

我建议先将文件加载到暂存区,这样目标表中现有字段的数据类型/长度就没有问题。

导入时,选择数据源后,检查每列的“高级”详细信息。 向导会检查表开头的行样本(不记得有多少行)以估计列长度。它默认为 50,因此如果表中的前 x 行少于 50 个字符,它将使用它,而不会意识到表中的后续行有更多字符。

这可以解释为什么将它分成两部分可以解决问题...第一部分可能有全部在较低字符范围内的行(例如在 50 以下),当它处理第二部分时,它确实找到较大的行查看样本以估计列宽并相应地设置它。 如果两个大小都小于目标列,则实际 INSERT 不会有问题。

您可以将 OutputColumnWidth 设置为更合适的数字。

,

有人可以确认/否认在将平面文件导入 SQL Server 时是否存在单元格限制(或任何其他类型的大小限制)?

您没有在 SQL Server 中达到某种限制。这与您的文件或您用来加载它们的工具有关。

,

Microsoft Excel 的字符限制为 32,767 个字符,您可以在此处阅读有关此限制的更多信息。

https://support.microsoft.com/en-us/office/excel-specifications-and-limits-1672b34d-7043-467e-8e27-269d656771c3

您可以使用 LEN() 函数找到字符的长度。对于 SQL Server,您可以将数据类型设置为 VARCHAR 并使其最多为 8,000 个字符。您可以在此处查看一些规格。

https://www.sqlservertutorial.net/sql-server-basics/sql-server-nvarchar/

我建议您先尝试导入一小部分数据;保存一份只有几十行数据的文件副本。确保它有效,然后再尝试几次,处理越来越大的数据集,从 Excel 到 SQL Server。无论错误是什么,我认为,随着您从小数据集到大数据集,它应该很快就会变得显而易见。