我們有一個SSIS包,它通過EXECUTE SQL TASK組件調用存儲過程。存儲過程包含很多不同的sql代碼片段,這些代碼可以動態構建,然後通過存儲過程中的exec strSQL執行。整個系統是以這種方式構建的,現在我們不能重新設計。問題是,當存儲過程中的某些內容失敗時很難從SSIS中找出存儲過程中的SQL語句導致異常/失敗。我們現在正在工作的是包含onError事件的代碼,用於讀取System :: ErrorDescription,它有助於在SSIS中顯示錯誤,然後發送帶有錯誤的電子郵件,這是行得通的。我想要添加的是有一個系統變量或其他方式來顯示在SSIS中的實際SQL(導致存儲過程中的異常),我可以包括在電子郵件中。有任何想法嗎?謝謝。如何將導致存儲過程異常的SQL語句返回給SSIS
1
A
回答
1
我有一個解決方案。表變量不會回溯到catch塊和回滾語句中。
因此,在將sql語句放入具有nvarchar(max)數據類型的變量表中之前,先放入它們。確保您的proc使用try catch塊和事務。在catch塊中,如果需要的話執行回滾,然後將表變量的內容和日期時間插入到日誌表中。您是否記錄了確切運行的查詢。您也可以創建一個單獨的表來存儲您嘗試插入或更新的數據,如果這也是一個問題。
1
當您通過使用F5運行包並且SQL語句失敗時,您可以檢查執行結果選項卡,但不幸的是,這隻顯示您的SQL語句的第一行或第二行。
不使用F5運行包,而是使用Crtl + F5運行它。這將打開一個終端窗口並像運行命令行一樣運行程序包。當每個任務運行時,它將輸出日誌信息,如果任務使用SQL語句並且失敗,它將輸出完整的SQL語句。
Ctrl + F5被稱爲'開始無調試',但我總是認爲這是一個更好的調試包。
相關問題
- 1. 如何將Sql Server存儲過程的結果返回給.Net
- 2. 從mysql存儲過程返回異常
- 3. 如何將SQL Server存儲過程結果返回給Excel
- 4. 如何SQL Server存儲在存儲過程中的SQL語句
- 5. 存儲過程爲什麼在SQL Server中返回語句?
- 6. SQL Server存儲過程在select語句中返回值
- 7. 將變量傳遞給SQL語句中的IN語句存儲過程
- 8. 如何從sql語句返回常量?
- 9. 存儲過程中的SQL case語句
- 10. SQL Server存儲過程,在Else語句CASE子句中返回多個值
- 11. 如何將動態SQL存儲過程的值返回給實體框架?
- 12. 使用存儲過程導致更新語句
- 13. SQL Server存儲過程刪除語句
- 14. SQL存儲過程選擇語句
- 15. IF在SQL Server語句存儲過程
- 16. SQL存儲過程更新語句
- 17. 如何傳遞數組並將其返回給存儲過程?
- 18. DRY SQL存儲過程;非常類似的UPDATE語句
- 19. 如何將參數傳遞給Oracle存儲過程在SSIS包
- 20. 存儲過程和SELECT語句返回不同的結果
- 21. MySQL存儲過程僅返回Select語句的第一行
- 22. 檢查存儲過程中的select語句是否返回行
- 23. 處理存儲過程中select語句返回的行
- 24. 返回存儲過程的SQL性能
- 25. SQL Server存儲過程的返回值
- 26. 返回存儲過程的結果sql
- 27. 如何將SELECT語句的返回值傳遞給存儲過程中的DELETE查詢?
- 28. Oracle:MIN()語句導致空行返回
- 29. 在單個結果返回的存儲過程中執行多個SQL語句
- 30. 主函數返回導致異常
感謝您的快速回復。有沒有辦法做到這一點,而無需回滾存儲過程中的事務?現在我們的代碼在存儲過程中沒有任何事務,而且我們的代碼在任何地方都沒有try catch語句,我知道應該改變它,但我試圖找到最簡單的方法來完成這個任務,爲此獲得批准。我如何從SSIS思想中讀取表變量?不知何故,我需要從表變量中獲取數據到SSIS(SSIS變量),以便我可以抓住sql並將其粘貼到電子郵件任務中。 – TuSabesTuSabes
將其添加到proc並插入到permananent日誌表中。然後,ssis apackage可以通過執行一個exec SQL任務將該表中的信息變爲可變信息。你可以做到這一點沒有嘗試抓住,但如果事情不能正常工作,並且它插入或更新,那麼你有數據完整性問題,所以我強烈建議你修復過程。 – HLGEM