【问题标题】:Excel to Sql Server table data loading issueExcel 到 Sql Server 表数据加载问题
【发布时间】:2012-11-30 01:53:23
【问题描述】:

我正在使用 SSIS 将数据从 Excel 导入 Sql 表。

我面临一些字符串值被 NULL 值替换的问题(因为前 8 条记录只包含数字值)。不用说,我尝试使用 IMEX=1 附加连接字符串,但问题仍然存在,我不想按照几篇文章中的建议篡改 REGISTRY。

你们能否建议解决此问题,在 Excel 中前 8 条记录之后的列中可能存在字符串值,但它应该与数据库中的原始数据一起使用。 我正在寻找一个好的解决方法,知道这似乎是一个标准问题。

【问题讨论】:

    标签: sql sql-server excel ssis


    【解决方案1】:

    请参阅我对关于如何在事后修复 Excel 源的元数据的类似问题的回答。

    https://stackoverflow.com/a/13459855/236348

    也试试这个:

    查看位于注册表 REG_DWORD "TypeGuessRows" 的 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel]。这是不让 Excel 仅使用前 8 行来猜测列数据类型的关键。将此值设置为 0 以扫描所有行。 这可能会影响性能。另请注意,添加 IMEX=1 选项可能会导致 IMEX 功能仅在 8 行后设置。改用 IMEX=0 以确保强制注册表 TypeGuessRows=0(扫描所有行)工作。

    从此页面:http://www.connectionstrings.com/excel

    在 Windows 7 中,此键位于: [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines\Excel]

    TypeGuessRows 的范围为 0 表示全部或 1-16 表示要扫描的行数。根据您的应用程序进行设置。

    【讨论】:

    • 这不是元数据问题。这是 ACE Excel 连接器的问题,它根据前 8 行值检测列的数据类型。我的前 8 行有数字值,后面是字母数字值。所以这不是元数据崩溃的情况......
    • 非常感谢威廉姆斯!它确实指导了我......我刚刚找到了一个解决方法并发布了相同的内容。请检查。
    【解决方案2】:

    我找到了解决此问题的临时解决方法。如果有一天有人发现它有用,请检查在此处发布...
    解决方案: 1) 在 ConnectionString 中使用 IMEX = 1
    2) 将第一行保留为 Header = FALSE
    3) 现在使用数据流任务将数据从 Excel 导入 Sql 数据,但仅在使用条件拆分消除第一行(即标题行)之后。

    此解决方案可确保即使前 8 个数据行中没有字母数字值,JET/ACE 连接器会将数据类型检测为 STRING - DT_STR 的字母数字标头。这样就解决了在两者之间插入 NULLS 的问题。

    有关使用 Excel 作为源的问题以及使用 IMEX=1 的可能解决方案的详细信息...请参阅:
    网址一:http://microsoft-ssis.blogspot.in/2011/06/mixed-data-types-in-excel-column.html

    网址 2:http://social.msdn.microsoft.com/Forums/en-US/sqlintegrationservices/thread/1b9020ec-616c-42e2-99c0-18f1258ff5db

    谢谢,

    贾斯汀·塞缪尔。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多