最近有个项目需要导入Excel数据到Sql Server数据库。我就在我本机(32bit)开发了一个SSIS导入包来执行这个任务。在本机测试一切OK,放到服务器上(64bit)创建了一个job来执行,出错报了一个“未注册的类型”的错。
在Google了过后,了解了由于64位机不支持Microsoft.Jet.OLEDB(Office没有64bit版本。。),又去MSDN查找了相关文章写到解决方法是:
To run a package in 32-bit mode from a 64-bit version of SQL Server Agent, select Use 32 bit runtime on the Execution options tab of the New Job Step dialog box.
Oh,My God.我找了大半天,非常仔细的寻找,就没发现执行选项页中有Use 32 bit runtime这个选项,非常郁闷。想了半天,终于想出了一个另类的方法。由微软的文章知道 64-bit version of SQL Server Agent执行的是<drive>:/Program Files/Microsoft SQL Server/90/DTS/Binn/DTExec.exe,而32位的utility是在<drive>:/Program Files (x86)/Microsoft SQL Server/90/DTS/Binn/DTExec.exe中,我就创建了一个Operation System (CmdExec)的job替换了原来的Sql Server Integration Services Package的job。在Operation System (CmdExec)的job中执行<drive>:/Program Files (x86)/Microsoft SQL Server/90/DTS/Binn/DTExec.exe来执行SSIS包,然后就搞定了。