【问题标题】:Why do SQL varchars (256) not get populated to my flat file in SSIS package? [duplicate]为什么 SQL varchar (256) 没有填充到我在 SSIS 包中的平面文件中? [复制]
【发布时间】:2019-07-30 16:03:15
【问题描述】:

我有一个 SSIS 包,它来自 Excel 文件,在 SQL 中执行查找,然后将查找中的字段写入平面文件。由于某种原因,SQL 表中数据类型为 varchar 256 的任何字段都不会被写入。它们以空值的形式出现。我的其他字段,包括 varchar 255,都很好。我尝试过将平面文件和 Excel 作为目标,但没有成功。

我尝试将 varchar 与数据转换转换为 256 和 Unicode 字符串,但没有运气。

即使我在源组件中预览一个简单的查询(例如:从 xyz 中选择姓氏),预览也会显示姓氏为空。它不会将具有不同数据类型的其他字段显示为空值。

【问题讨论】:

  • 空字段不是 Excel 文件的一部分。我在 Excel 文件中只有一个字段。使用该字段的值,我正在查找以返回 SQL 表中的所有字段。当我尝试将这些字段写回平面文件时,它们会显示为空值。

标签: sql excel ssis data-conversion


【解决方案1】:

这通常是 Excel 驱动程序仅读取前 8 行数据并由于缺少它正在检查的数据而误解正确的数据类型的情况。以下是 Microsoft 网站上的一些已知问题:Reference

导入问题

空行

当您将工作表或命名区域指定为源时,驱动程序会从工作表或区域左上角的第一个非空单元格开始读取连续的单元格块。因此,您的数据不必从第 1 行开始,但源数据中不能有空行。例如,列标题和数据行之间不能有空行,或者工作表顶部的标题后跟空行。

如果数据上方有空行,则无法将数据作为工作表进行查询。在 Excel 中,您必须选择数据范围并为范围指定名称,然后查询命名范围而不是工作表。

缺失值

Excel 驱动程序读取指定源中的一定数量的行(默认为八行)以猜测每列的数据类型。当一列似乎包含混合数据类型,尤其是数字数据与文本数据混合时,驱动程序决定支持多数数据类型,并为包含其他类型数据的单元格返回空值。 (在平局中,数字类型获胜。)Excel 工作表中的大多数单元格格式选项似乎不会影响此数据类型确定。

您可以通过指定导入模式将所有值作为文本导入来修改 Excel 驱动程序的这种行为。要指定导入模式,请将 IMEX=1 添加到“属性”窗口中 Excel 连接管理器的连接字符串中的扩展属性值。

截断的文本

当驱动程序确定 Excel 列包含文本数据时,驱动程序会根据其采样的最长值选择数据类型(字符串或备忘录)。如果驱动程序在其采样的行中未发现任何超过 255 个字符的值,它会将列视为 255 个字符的字符串列而不是备注列。因此,超过 255 个字符的值可能会被截断。

要从备注列导入数据而不截断,您有两种选择:

确保至少有一个采样行中的备注列包含超过 255 个字符的值

增加驱动程序采样的行数以包含这样的行。您可以通过增加以下注册表项下的 TypeGuessRows 的值来增加采样的行数:

可再发行组件版本 - 注册表项

Excel 2016 - HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Office\16.0\Access Connectivity Engine\Engines\Excel Excel 2010 - HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-16
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多