我正在使用 SSIS 将数据从 Excel 导入 Sql 表。
我面临一些字符串值被 NULL 值替换的问题(因为前 8 条记录仅包含数值)。不用说,我尝试使用 IMEX=1 附加连接字符串,但问题仍然存在,我不想按照几篇文章中的建议篡改 REGISTRY。
你们能否建议解决这个问题,在 Excel 中前 8 条记录之后的列中可能存在字符串值,但它应该与数据库中的原始数据一起使用。我正在寻找一个好的解决方法,知道这似乎是一个标准问题。
我正在使用 SSIS 将数据从 Excel 导入 Sql 表。
我面临一些字符串值被 NULL 值替换的问题(因为前 8 条记录仅包含数值)。不用说,我尝试使用 IMEX=1 附加连接字符串,但问题仍然存在,我不想按照几篇文章中的建议篡改 REGISTRY。
你们能否建议解决这个问题,在 Excel 中前 8 条记录之后的列中可能存在字符串值,但它应该与数据库中的原始数据一起使用。我正在寻找一个好的解决方法,知道这似乎是一个标准问题。
请参阅我对关于如何在事后修复 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 表示要扫描的行数。根据您的应用程序进行设置。
我找到了解决此问题的临时解决方法。如果有一天有人发现它有用,请检查在此处发布...
解决方案:1)在 ConnectionString 中使用 IMEX = 1
2)将第一行保留为 Header = FALSE
3)现在使用数据流任务将数据从 Excel 导入到 Sql数据,但仅在使用条件拆分消除第一行(即标题行)之后。
此解决方案确保即使在前 8 个数据行中没有字母数字值,JET/ACE 连接器的标题为字母数字也会将数据类型检测为 STRING - DT_STR。这解决了在两者之间插入 NULLS 的问题。
有关以 Excel 作为源的问题以及使用 IMEX=1 的可能解决方案的详细信息...请参阅:
URL 1:http ://microsoft-ssis.blogspot.in/2011/06/mixed-data-types-in-excel-列.html
谢谢,
贾斯汀·塞缪尔。