搜尋本站文章

2009-11-03

SSIS 2008 的 「指令碼工作(Script Task)」只能叫用一次中斷點做偵錯作業。debugger hits breakpoints in only one Script task



使用的版本:SSIS 2008 sp1

實作情境:
1. 外層使用「Foreach 迴圈容器」,選取指定的資料夾內的多個檔案。在內層包含一個「指令碼工作」,分別對這些檔案進行處理。
2. 在「指令碼工作」內設定「中斷點」。


預期結果:
1. 每選取到一個檔案,應該就叫起「Visual Studio Tools for Applications (VSTA)」偵錯工具才對。
2. 但實際上執行時,卻僅有在處理第一個檔案時,才有執行「Visual Studio Tools for Applications (VSTA)」偵錯工具。後續的檔案處理部分,都沒有叫起「Visual Studio Tools for Applications (VSTA)」偵錯工具。





但在 SSIS 2005 版本,正確可行。



依據 SQL Server 2008 的線上文件之說明:
當您為包含多個指令碼工作的封裝偵錯時,偵錯工具只會在一個指令碼工作中叫用中斷點,而且將會忽略其他指令碼工作中的中斷點。
如果指令碼工作是 [Foreach 迴圈] 或 [For 迴圈] 容器的一部分,偵錯工具會在迴圈的第一次反覆運算後,忽略指令碼工作中的中斷點。

可能的解決方法:
1. 使用 MessageBox.Show() 。
2. 撰寫foreach的程式碼來loop檔案。

詢問微軟 CSS 後的回覆,重點整理如下:

SSIS 2005 使用的是 VSA 2005,而在 SSIS 2008 使用的是 VSTA 2008,但目前 VSTA 尚未支援在同一個封裝中載入多個「Script task」的「assembly」, 因此無法在「Foreach Loop」內對多個「Script Task」執行偵錯作業
預計會下一版的 SQL Server 做討論。



在此感謝 Vera 熱心的協助。

參考文件:
SQL Server 2008 線上叢書 (2009 年 7 月)如何:在指令碼工作中設定中斷點來偵錯指令碼
http://msdn.microsoft.com/zh-tw/library/ms140033.aspx

SQL Server 2008 線上叢書 (2009 年 7 月)指令碼工作
http://msdn.microsoft.com/zh-tw/library/ms141752.aspx

SQL Server 2005 線上叢書 (2008 年 11 月)
指令碼工作
http://msdn.microsoft.com/zh-tw/library/ms141752%28SQL.90%29.aspx