从存储过程执行SQL Server SSIS包时出错

时间:2011-10-11 17:58:39

标签: sql-server stored-procedures ssis

我有一个存储在文件系统中的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位模式下运行,但我无法弄清楚如何在这里做到这一点。求救!

2 个答案:

答案 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) + '"'