2011-10-11 119 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