2012-02-07 69 views
0

我想製作一個只能在表格不爲空的情況下從表中複製數據的包。我知道如何計數以及如何製作一個用於複製數據的包,但問題是Source無法輸入任何內容,所以我不知道如何去做。有什麼建議麼?SSIS複製表如果不爲空

+0

來源不能有任何輸入? – joshua 2012-02-07 11:25:51

+0

我想說,你不能將綠線從包裝拖動到源...或者我錯了,我錯過了什麼? – 2012-02-07 11:38:29

回答

1

我不明白你的意見,關於拖拽一個「從包到源代碼的綠線」,而不是試圖提前確定表是否爲空,只要做你的副本,然後看看有多少行復制:

  1. 的行數
  2. 創建一個包變量使用的行數轉換
  3. 使用an expression in the precedence constraint檢查變量填充變量:如果是大於零則繼續執行你的包的其餘部分
+0

如果表格不是空的,我必須截斷destionation,否則保持原樣。我的意思是,它不可能使用例如條件拆分組件(它將檢查表是否爲空),將優先級約束從它拖到OLE DB源,從中選擇要複製的數據。 – 2012-02-07 12:44:36

+0

這個作品,謝謝! – 2012-02-07 13:01:50

0

@Pondlife我不認爲你可以在數據流任務上使用優先約束,你能嗎? 我相信你只能在控制流程中使用它。

我會添加一個「執行SQL任務」計數,發送結果到一個變量,並從這個任務,我會拖動綠色箭頭到數據流任務,使複製和在這個箭頭上,我會添加優先約束上的表達式。

+0

你對優先約束是正確的,但它並不重要:一旦你在變量中有rowcount,你可以在任何可以在數據或控制流中使用變量的地方使用它。你的建議與我的建議可能略有不同。 – Pondlife 2012-02-07 13:24:40

0

正如您已經正確指出的那樣,數據流源不接受輸入,因此無法在數據流中執行邏輯來確定是否應該運行此任務。

Cannot create connector. 
The destination component does not have any available inputs for use in creating a path. 

但是,沒有什麼能夠阻止您在控制流程中設置此邏輯。我會使用一個查詢,在目標系統上點擊DMVs for a fast rowcount,只過濾我希望複製的表。

有了空表的列表,它可能取決於我如何處理它。對於少數表格,我將N個數據流定義爲一個無作用的腳本任​​務作爲先例,然後在表名稱上使用一個表達式來啓用路徑,就像我在這個question上做的一樣。

如果有許多表,我會爲每個表定義一個包,然後根據空表名稱動態構建包名來調用執行包任務。