2017-03-09 64 views
2

如果我沒有將任何變量傳遞給腳本任務,則可以通過設置Dts.TaskResult使其失敗或成功。但是當我傳遞一些讀/寫變量時,我不能讓它失敗(永遠執行),但我仍然可以使它成功。帶有讀/寫變量的SSIS腳本任務不會在ScriptResults.Failure上停止

我是否缺少一些設置?請幫忙。

我正在使用Sql Server 2012(VS 2010 for BIDS)。 腳本代碼:

Dts.TaskResult = (int)ScriptResults.Failure; 
return; 

讀/寫變量傳遞:

User::FileName 

回答

1

Hadi, 非常感謝您的迴應,真的很感激它。 我在其他帖子中看到類似的鎖定問題,嘗試過並失敗。但後來我能夠自己瞭解根本原因,併發布它,這樣可以爲其他人節省時間:

我後來意識到,除了上面的腳本任務和readwrite變量之外,我還使用了即ReadWrite變量在整個包的錯誤處理事件中。當在錯誤處理程序中使用SSIS包中使用的ReadWrite變量時,即使發生異常或Dts.TaskResult設置爲失敗,也會使包不會失敗。相反,它會在無限循環中運行!很古怪,呃?我希望微軟計劃在錯誤處理程序中使用ReadWrite變量的腳本任務返回某種驗證錯誤,而不是無限執行...

無論如何,我通過在腳本任務中不使用該ReadWrite變量來解決該問題,將其設置在某個Expression任務中供錯誤處理程序使用。

0

的問題可能是由可變僵局

嘗試使用下面的代碼設置的變量值造成的:

Variables lockedVariables = null; 
Dts.VariableDispenser.LockOneForWrite("FileName", ref lockedVariables); 
lockedVariables["FileName"].Value = "bla bla bla"; 
lockedVariables.Unlock(); 

還有從腳本中刪除變量ReadWriteVariables

+0

順便說一句,這也可能工作,因爲你建議我可以從ReadWrite列表中刪除該變量。當我在腳本任務中使用類似的代碼鎖定/解鎖變量時,我沒有嘗試從ReadWrite列表中刪除變量。將嘗試在其他一些包。非常感謝!! – Sumanasa

+0

@Sumanasa快樂解決您的問題。你的答案就像一個解決方法。不是解決問題的最佳方法。祝你好運 – Hadi

+0

嘗試上面的代碼,並從另一個包中的ReadWrite列表中刪除變量。但腳本任務仍然進入無限循環沒有失敗:(..看起來像它是SSIS上的錯誤:(:((無論如何,表達式任務對我來說足夠好,因爲我只需要基於完全合格的路徑設置文件名。之後我會在腳本任務中執行文件檢查部分,這樣腳本任務可以自由地對異常執行失敗,並且錯誤處理程序使用文件名進行處理。 – Sumanasa