我正在開發並於2012年SQL測試的SSIS包從文本文件導入行到一個臨時表(即每次執行之前截斷)使用腳本任務。然後使用Execute SQL任務運行存儲過程,然後該存儲過程查詢登臺表並格式化數據以插入到最終表中。存儲過程失敗在執行SQL任務,但手動成功
目前我只用兩個不同的文件測試。這些文件是每天收到的獨立電子郵件,我在Outlook中配置爲另存爲文本文件。每個文件都重命名爲YYYYDDMM_HHMMSS_ [文件名] .txt。我的SSIS包使用For Each循環將該文件名分配給一個變量@AckFileName,該變量傳入我的存儲過程並從中解析文件日期時間。
所以我的存儲過程的第一行是:
SELECT DISTINCT CONVERT(datetime,left(@AckFileName,8)+' '+substring(@AckFileName,10,2)+':'+substring(@AckFileName,12,2)+':'+substring(@AckFileName,14,2))
當我在SSMS運行存儲過程是否能夠正常工作:
Exec [dbo].[ParseAckFile] @AckFileName
然而,即使我有同樣的相同代碼對於我執行SQL任務中的SQL語句,我收到以下錯誤:
"Exec [dbo].[ParseAckFile]..." failed with the following error: "Conversion failed when converting date and/or time from a character string."
好吧,所以這似乎很簡單/足夠明顯...除了我的存儲過程中的查詢將字符串轉換爲日期時間,所以它應該也會在手動運行時返回一個錯誤,是否正確?我已經用每個文件測試過了,結果是一樣的 - proc可以用任何一個文件手動運行,但執行SQL任務失敗。
此外:我試着在Execute SQL任務中設置Delay Validation = True,使用OLEDB或ADO.NET連接到我的最終表,並使用Execute SQL任務中的表達式構建我的查詢。這些嘗試都沒有對我收到的錯誤消息產生任何影響。
我可以嘗試其他建議嗎?
你試過看探查器跟蹤,以驗證您的SSIS包發送你認爲它是參數值? –
是@TabAlleman,參數中的文件名是我期待的。我只是發現了一些東西 - 爲了測試,我在存儲過程中對文件名進行了硬編碼,然後從Execute SQL命令中刪除了參數。它工作正常。現在我想知道,即使我的參數是Varchar,如果我可能需要將它封裝在proc中的單引號內?我需要做更多的測試...... –