2015-11-16 51 views
1

我是SSIS的新手。如何記錄SSIS的輸出執行SQL任務

我使用執行SQL任務創建了SSIS包。我稱之爲存儲過程。 我的存儲過程會打印幾條消息,如 'Insert Started' 'Update Started' 'Update Completed' 但它不返回任何結果集。

如何將存儲過程的輸出寫入SSIS中的日誌文件。

請幫助我,我在過去兩天掙扎。

我嘗試使用DTEXEC這樣

DTEXEC/F 「C:\用戶\ Karthick \桌面\ SSIS \ Package.dtsx」> MyOutput.txt

但只打印執行SQL任務值不存儲過程打印語句。

+0

這是正常的... –

+0

請告訴我,我怎樣寫存儲過程的輸出到SSIS – StackUser

回答

0

您可以通過這種方式接近,

  • 登錄SSIS在SQL表
  • 登錄表
  • 創建一個視圖,例如看到一起logtable
  • 和存儲過程打印此觀點與SSIS在文件
+0

日誌文件是存在的,實現這個 – StackUser

+0

我的問題任何簡單的方法是如何記錄存儲過程print語句日誌文件 – StackUser

+0

我明白你的問題,但沒有辦法直接做。你必須這樣做 –

0

我猜你無法通過趕上存儲過程打印消息。要做到這一點,你需要使用Script TaskScript Component。在腳本內部,您可以調用存儲過程並使用事件處理程序InfoMessage來捕獲存儲過程中的消息。

示例下面的代碼 -

 public event SqlInfoMessageEventHandler InfoMessage; 
     void myConnection_InfoMessage(object sender, SqlInfoMessageEventArgs e) 
     { 
      using (StreamWriter writer = new StreamWriter(<your log file path>)) 
       { 
        writer.Write(e.Message); 
       } 
     } 

     public void Main() 
     { 
     using (var conn = new SqlConnection(<your connection manager>)) 
     using (var command = new SqlCommand(<your sp name>, conn) 
      { 
      CommandType = CommandType.StoredProcedure 
      }) 
     try 
      { 
      { 
       ((SqlConnection)conn).InfoMessage += new SqlInfoMessageEventHandler(myConnection_InfoMessage); 
       conn.Open(); 
       command.ExecuteNonQuery(); 
      } 
      } 
     catch 
      { 
       throw; 
      } 
     finally 
      { 
       command.Dispose(); 
      } 

     Dts.TaskResult = (int)ScriptResults.Success; 
     } 
0

SSIS是一種產品,如果你右擊它足夠它最終會做一些事情的。但嚴重的人,它讓我想起VB6有一個糟糕的一天...

這聽起來像一個簡單的事情要做,但它需要大量的右鍵單擊和在這裏和那裏小小的代碼。以下是具體步驟:

  1. 聲明在您的存儲過程(存儲過程)的一種或多種output parameters包含您的狀態信息
  2. 在SSIS中,modify your call以遏制SSIS問號「通配符」的存儲過程(或不管他們叫他們)
  3. 添加variable到SSIS
  4. Map SPROC output parameter(s)到SSIS變量
  5. 搭建logging provider在SSIS
  6. 啓用一個event觸發將您的狀態消息寫入日誌
  7. 創建另一個任務是SSIS將數據實際寫入日誌。我推薦使用SQL,但由你決定

如果你閱讀上面的鏈接,你會明白。請閱讀一些細節和編輯意見。

通過聲明一個或多個輸出參數並將它們與狀態消息一起設置,您可以通過SPROC啓動該地點。

SET @my_status = 'Insert Started' 

也許你想要將所有的消息連接成一個輸出參數,或者有多個輸出參數。由你決定。

現在,右鍵單擊您的SSIS控制流畫布並添加一個變量。如果您有更多的SPROC輸出參數,沖洗並重復。

右鍵單擊您的SQL任務和編輯您的SQL調用看起來像這樣:

EXEC myStoredProcedure ? OUTPUT 

如果您有輸入參數,那些需要被佔了這裏。這個?非常重要,因爲它代表了一個基於零的編號參數,您必須將其映射以便SSIS實際上對狀態消息執行任何操作。該設計讓人聯想到Wordstar郵件在個人計算的石器時代重新合併。

轉到參數映射。點擊添加並查找您的變量。這將是難看的東西

User::my_status 

如果我們都認爲參數名稱是參數名稱,我們都會是錯的。在這個例子中,你會把0(零)放在這裏,因爲這顯然是你的SPROC中的zero-eth參數。

好的,現在您已經設置了一個可以記錄的變量。但是你還沒有完成。你必須設置另一個執行SQL任務來實際記錄這個。我不會引導你通過這位親愛的讀者,但希望Aalam Rangi的優秀文章仍然在那裏給你你需要做的一切。簡而言之,您必須a)設置SSIS日誌記錄提供程序,b)啓用將觸發將數據寫入日誌的事件,c)編寫SQL插入語句,並在其中添加更多問號以實際寫入數據到您要記錄到的標準SQL表。如果你想登錄到一個文件,這篇文章仍然會有所幫助。這裏是插入代碼,它完美適用於SSIS和Visual Studio 2015.謝謝Aalam!

INSERT INTO [dbo].[sysssislog] 
([event] 
,[computer] 
,[operator] 
,[ source] 
,[sourceid] 
,[executionid] 
,[starttime] 
,[endtime] 
,[datacode] 
,[databytes] 
,[message]) 
VALUES 
('*SSIS-OnVariableValueChanged' -- Custom event name 
,? -- param 0 
,? -- param 1 
,? -- param 2 
,? -- param 3 
,? -- param 4 
,? -- param 5 
,? -- param 6 
,0 -- Zero 
,'' -- Blank string 
,?) -- param 7 

快點右鍵點擊!