2009-01-12 51 views
11

我正在我的SSIS包中運行一個執行SQL任務語句。執行SQL任務正在運行sql並檢查這些表是否有超過1000行。如果他們的行少於1000行,我想讓包失敗。如何在集成服務中手動失敗包?

如何在SQL語句中強制失敗?

回答

14

AFAIK,SSIS中的任務失敗時出錯。所以如果你的執行SQL任務有這樣的陳述:

declare @count int 
select @count = select count(*) from my_table 
if @count < 1000 
begin 
    raiserror('Too few rows in my_table',16,1) 
end 
else 
begin 
    -- Process your table here 
end 

你應該得到你想要的結果。

+0

您還必須正確設置包的屬性,並可能設置 'failparentonerror' – ConcernedOfTunbridgeWells 2009-01-12 15:27:50

2

您需要使屬性FailPackageOnFailure true..try檢索特定任務的屬性FailPackageOnFailure並將值賦給true。這樣包就會失敗。

2

您可以創建這樣

EXEC sp_ADDMESSAGE 
     @msgnum=55555, 
     @severity=1, 
     @msgtext='Threshold condition failed. The package execution has been terminated.' 

自定義錯誤信息,那麼您可以調用使用RAISERROR()

Raiserror (55555,20,-1) WITH LOG 

您需要輸入大於18的數爲嚴重性此錯誤(這裏是20)。您需要具有管理員權限。並且不要忘記使用日誌

8

我喜歡使用腳本任務強制失敗。這很容易。

1)腳本任務

2)改變自動生成的代碼行添加:

Dts.TaskResult = (int)ScriptResults.Success; 

Dts.TaskResult = (int)ScriptResults.Failure; 

和你去那裏!

0
  1. 創建一個用戶變量。將記錄計數存儲在該變量中(User :: Rcnt)
  2. 只需使用發送郵件任務並定義工作流程即可。
  3. 在先例約束(用戶:: RCNT < 20)