0

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

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

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

4

2 回答 2

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 表示要扫描的行数。根据您的应用程序进行设置。

于 2012-11-28T15:37:08.143 回答
0

我找到了解决此问题的临时解决方法。如果有一天有人发现它有用,请检查在此处发布...
解决方案: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

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

谢谢,

贾斯汀·塞缪尔。

于 2012-11-29T17:53:23.283 回答