2011-10-11 101 views
0

时,我有存储在文件系统中的SSIS包,即进口悖论(DBF)文件。 BIDS中的pacakge运行正常,但是当我尝试从存储过程调用它时发生错误。错误执行SQL Server的SSIS包从存储过程

我用下面的语法来从SP

SET @packageString = 'dtexec /f [Packagename].dtsx /Set \package.variables[ActivityDate].Value;"' + convert(VARCHAR(20),@dateTo, 101) + '"' 
EXEC master..xp_cmdshell @packageString 

称之为这是我的错误:

Description: SSIS Error Code DTS_E_OLEDB_NOPROVIDER_64BIT_ERROR. The requested OLE DB provider Microsoft.Jet.OLEDB.4.0 is not registered -- perhaps no 64-bit provider is available. Error code: 0x00000000. An OLE DB record is available. Source: "Microsoft OLE DB Service Components" Hresult: 0x80040154 Description: "Class not registered".

我知道这个问题是与DBF文件,因为当我禁用SSIS中的任务,包的其余部分执行正常。 它看起来像这个软件包需要运行在32位模式,但我不知道如何在这里做到这一点。请帮助!

+0

您可以通过计划的作业运行SSIS包,或者它必须运行时,用户启动一个操作? – HardCode

+0

它必须由用户从存储过程运行。 – Tamila

回答

0

好吧,我终于找到了解决方案!可能不是最优雅的,但它的工作原理。出于某种原因,双引号正在阻碍。所以我摆脱他们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) + '"' 
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

+0

试过这个,得到以下错误:'C:\ Program'不被识别为内部或外部命令,可操作程序或批处理文件。该路径用双引号,但它似乎并不喜欢的道路反正.. – Tamila

+0

更新我的答案的空间,似乎是需要被成倍上涨的xp_cmdshell的是吃他们 – billinkc

+0

我在2008年现在的双引号即使我可以导航到DTEXEC.exe和dts软件包文件,我也会得到“系统找不到指定的路径”错误。 – Tamila