2014-10-22 92 views
1

我有一個ssis包,其中包括一個foreach容器,用於循環遍歷文件並將其加載到表中。現在我想跟蹤進程開始時間,結束時間和狀態到另一個表中。我怎樣才能做到這一點..?如何獲取進程的開始時間和結束時間ssis

+0

您是否需要跟蹤整個程序包或循環執行時間? – 2014-10-22 12:22:01

+0

每個文件加載的循環開始時間和完成加載的時間 – 2014-10-23 04:06:36

+0

請不要發佈重複項。先完成你原來的問題。 http://stackoverflow.com/questions/26479439/load-files-into-a-table-using-loop-in-ssis-2008 – 2014-10-23 04:16:37

回答

2

創建2個全局變量 - 一個用於開始時間,另一個用於結束時間。 使用在foreach容器之前運行的腳本任務來設置啓動時間變量,以及在您的foreach容器之後運行的另一個腳本任務來設置結束時間變量。之後,使用派生列「數據流轉換」將開始和結束時間放入管道非常簡單,以便您可以保留它們。

在腳本任務,不要忘記引用變量,和腳本應該是這個樣子:

public void Main() 
    { 
     DateTime currentDate = DateTime.Now; 
     Dts.Variables["StartDate"].Value = currentDate; 
     Dts.TaskResult = (int)ScriptResults.Success; 
    } 

的另一種方法也可以在這裏找到:How can a step in an SSIS package check for the time?,但這隻會讓你的開始時間,而不是結束時間。

0

我希望你正在使用SSIS 2012.

SSISDB,一組視圖是可用的。那些給我們每個執行包的細節。你可以從下面的sql編輯。 (只是一個例子)

SELECT E.execution_id, 
     E.project_name, 
     E.package_name, 
     S.start_time, 
     S.end_time 
FROM [SSISDB].[catalog].[executions] E 
JOIN [SSISDB].[catalog].[executables] EX ON E.execution_id = EX.executable_id 
JOIN [SSISDB].[catalog].[executable_statistics] S ON E.execution_id = S.execution_id 
1

然而,這個問題並沒有真正的優雅的解決方案,你可以試試這個。

創建單獨的包,其中包含單個或組包含的任務,從監視Stopwatch對象的腳本任務中加載並執行它。

 public void Main() 
    { 
     Application dtsRuntimeApp = new Application(); 

     Package dtsPackage = dtsRuntimeApp.LoadPackage(@"PackageFileName.dtsx", null); 

     Stopwatch stopwatch = new Stopwatch(); 

     stopwatch.Start(); 

     dtsPackage.Execute(); 

     stopwatch.Stop(); 

     var totalElapsedTime = stopwatch.Elapsed; // package timing here. 
    } 
相關問題