2010-05-28 116 views
1

在數據流任務中,我可以將行數計入處理流中,並將計數存入變量。如果rowcount大於0,我可以稍後使用該變量來有條件地執行一些其他工作。這對我來說很好,但對於預期會返回單行的sql任務,我沒有相應的策略。在那種情況下,我將這些值返回到變量中。如果查找不產生行,那麼在將值分配給這些變量時,sql任務會失敗。我可以在該組件失敗的情況下進行分支,但是這會產生副作用 - 如果將作業作爲SQL Server代理作業步驟運行,則該步驟將返回DTSER_FAILURE,導致該步驟失敗。我可以告訴sql代理忽略步驟失敗,但是我不知道在這一步中是否有合法的錯誤。這似乎比它應該更難。如何應對SSIS 2005中返回單行的SQL任務中的空結果?

我能想到的唯一策略是使用count(*)聚合運行相同的查詢,並測試返回的數字是否大於0,如果是,則再次運行查詢而不計數。這很醜陋,因爲我在兩個地方有相同的查詢,我需要保持同步。

有沒有更好的方法?

回答

0

在相同的條件下,您可以使用其他邏輯(& &或||)。我將採取您的單一聲明的變量之一,並說些大意:

如果@User :: rowcount> 0 || @用戶:single_record_var!=默認

這應該有所幫助。

0

什麼樣的SQL語句?你可以改變它仍然返回一個包含所有NULL而不是沒有行的行嗎?

什麼阻止它返回多行?如果它返回多行,包會失敗,對吧?

您也可以將其更改爲調用存儲過程,然後在兩個地方調用存儲過程而無需重複代碼。您也可以將其更改爲視圖或用戶定義的功能(如果需要參數),SELECT COUNT(*) FROM udf()檢查是否有數據,SELECT * FROM udf()獲取該行。