我正在使用SSIS从Excel导入数据到Sql表。
我面临的问题是一些字符串值被NULL值替换(因为前8个记录只包含数值)。毋庸置疑,我尝试使用IMEX = 1附加连接字符串,但问题仍然存在,我不想按照几篇文章中的建议篡改REGISTRY。
你们可以建议解决这个问题,在Excel中的前8个记录之后的列中可能有字符串值,但它应该与DB中的原始数据一起使用。 我正在寻找一个好的解决方法,知道这似乎是一个标准问题。
答案 0 :(得分: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 \微软\喷气\ 4.0 \发动机\ EXCEL]
TypeGuessRows的全部范围为0,要扫描的行数为1-16。根据您的应用进行设置。
答案 1 :(得分:0)
我找到了问题的临时解决方法。如果有人在某天发现它有用的话,请检查在此发布...
解:
1)在使用IMEX = 1的ConnectionString中
2)将第一行保持为标题= FALSE
3)现在使用数据流任务将数据从Excel导入到Sql数据,但仅在使用条件分割消除第一行(即标题行)之后。
此解决方案可确保即使前8个数据行中没有字母数字值,标头为字母数字,JET / ACE连接器也会将数据类型检测为STRING - DT_STR。这解决了插入NULLS的问题。
有关Excel作为来源的问题以及使用IMEX = 1的可能解决方案的详细信息,请参阅:
网址1:http://microsoft-ssis.blogspot.in/2011/06/mixed-data-types-in-excel-column.html
谢谢,
贾斯汀塞缪尔。