我有一个存储在文件系统中的SSIS包,它导入了Paradox(.dbf)文件。 pacak在BIDS中运行良好,但是当我尝试从存储过程调用它时出错。
我使用以下语法从sp
中调用它SET @packageString = 'dtexec /f [Packagename].dtsx /Set \package.variables[ActivityDate].Value;"' + convert(VARCHAR(20),@dateTo, 101) + '"'
EXEC master..xp_cmdshell @packageString
这是我得到的错误:
描述:SSIS错误代码DTS_E_OLEDB_NOPROVIDER_64BIT_ERROR。该 请求的OLE DB提供程序Microsoft.Jet.OLEDB.4.0未注册 - 也许没有64位提供商可用。错误代码:0x00000000。一个 OLE DB记录可用。来源:“Microsoft OLE DB服务 组件“Hresult:0x80040154描述:”类未注册“。
我知道问题出在dbf文件中,因为当我在SSIS中禁用该任务时,包的其余部分执行正常。 看起来这个包需要在32位模式下运行,但我无法弄清楚如何在这里做到这一点。求救!
答案 0 :(得分:2)
64位计算机上有两个dtexec可用。 Windows Path变量首先列出了64位Microsoft SQL Server,因此当您在代理中运行它时,您将调用64位dtexec。当您从BIDS中执行它时,您总是使用32位版本。
更新您的变量以明确使用exe的32位版本(根据BOL中的评论编辑,需要将所有双引号加倍)
SET @packageString = '""C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\DTExec.exe"" /f [Packagename].dtsx /Set \package.variables[ActivityDate].Value;"' + convert(VARCHAR(20),@dateTo, 101) + '"'
这假定2008年,但如果你有2005年,则上述将用90替换100
答案 1 :(得分:1)
好的,我终于找到了解决方案!可能不是最优雅的,但它的工作原理。出于某种原因,双引号正在阻碍。所以我摆脱了alltogehter:
SET @packageString = 'D:Progra~1\Micros~2\100\DTS\Binn\DTExec.exe /f [Packagename].dtsx /Set \package.variables[ActivityDate].Value;"' + convert(VARCHAR(20),@dateTo, 101) + '"'