【问题标题】:Truncation errors trying to import from Excel尝试从 Excel 导入时出现截断错误
【发布时间】:2013-01-29 16:51:46
【问题描述】:

我正在尝试导入 NDC 数据库,您可以在此处下载:http://www.fda.gov/drugs/informationondrugs/ucm142438.htm

当我最初尝试在 zip 文件中导入 excel 时,它抱怨格式,所以我从一个空白的 excel 开始,并将其从 txt 文件导入到 excel 中。

我创建了一个表来导入数据并将所有列设置为 nvarchar(MAX)。它抱怨的列是 SUBSTANCENAME 列。我查了一下,那一列最长的值大约是 2700 个字符。

我的理解是 nvarchar(MAX) 应该很容易容纳那么多。除了将该列更改为文本字段之外,我不确定该怎么做。它应该适合该列吗?

我尝试将其设置为忽略错误,但据我所知,它什么也没做,至少在我尝试时它似乎永远不会忽略它们。

【问题讨论】:

    标签: sql-server sql-server-2008 excel import sql-server-2008-r2


    【解决方案1】:

    如何将数据导入 SQL Server 表?如果我没记错的话,SSIS 使用 Excel 文件的前 5 行或 10 行来确定数据类型和长度。我记得我必须对注册表进行更改才能获得更大的样本量 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines\Excel 可以修改 TypeGuessRows 条目以获得更大的样本量。 这是假设您使用的是 SSIS - 但如果您使用的是 SQL Server Import,那么它也会做同样的事情。

    【讨论】:

    • 这是否意味着它并没有真正遇到表格问题,而是 SSIS 预期的数据?
    • 是的。如果您使用 SSIS 进行导入,默认情况下它会从 Excel 中查询前 8 行以对数据类型和长度进行判断调用。如果前 8 行之后出现的任何行更大,那么它会抱怨截断,因为它没有预料到。如果您将注册表值修改为更大的数字,它应该可以解决问题。或者您可以以其他格式导入它,例如 CSV,您可以更好地控制数据类型和长度。 NVARCHAR(MAX) 不会用完空间 - 但它可能会有很多开销。
    • 好的,我知道注册表修复,但我不知道你为什么这样做。我想,因为我的表格栏足够大,可以容纳它,这就足够了。经验教训。
    • 同意,这肯定是令人困惑的行为。我希望 MS 能够继续将该默认值更改为更大的值,但我想它可能不会为他们弹出太多。希望有帮助!
    猜你喜欢
    • 2010-11-05
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    相关资源
    最近更新 更多