2013-12-19 27 views
1

我想根據條件在SSIS中執行任務。具體來說,我想要創建一個表或清除它(截斷它),取決於它是否已經存在。如何在SSIS中執行條件分支

目前我使用的是SQL任務,在SQL做的工作,但我不知道是否有更好的辦法...

謝謝!

+1

是否有任何好處分裂邏輯到幾個SSIS UI任務?鑑於我認爲這是一個偏好和風格問題,我喜歡在SQL代碼中保留儘可能多的邏輯,而不是SSIS包UI任務。 – Mike

+0

我必須同意@Mike,包含很多花哨的UI技巧的包比在SQL任務中執行大量操作的包更難維護。 – HLGEM

+1

我主要同意Mike和@HLGEM。這裏更大的問題可能是:這是一個好主意嗎?我會說這取決於。隨着這一變化,包裝中的下一個更有效?例如:爲什麼這個軟件包應該分支,下游有一個很好的理由嗎?也許截斷之後的右手路徑完全不同於創建表之後的左手路徑。如果沒有實質性差異,那麼一定要用一個SQL任務來解決它。在可視化方面還可以取決於您的偏好:這是否感覺混亂? –

回答

4

通過向優先約束添加一個表達式,這在技術上是可行的。 Click here for the details。基本步驟...

  1. 創建一個包範圍的變量@FoundMyTable如果表存在和0,如果表不存在

  2. 設置通過@FoundMyTable的價值,將持有的值1一個名爲執行SQL LookForMyTable的任務,使用select語句和INFORMATION_SCHEMA.TABLES返回表計數

    SELECT COUNT(1)AS table_count 
        FROM INFORMATION_SCHEMA.TABLES t 
        WHERE t.TABLE_NAME = 'MyTable'; 
    
  3. 創建兩個執行SQL任務:TruncateMyTable和CreateMyTable

  4. 連接LookForMyTable既TruncateMyTable和CreateMyTable

  5. 上LookForMyTable和TruncateMyTable> 表達式和約束> @FoundMyTable == 1

  6. 上LookForMyTable之間的優先約束雙擊之間的優先約束雙擊和CreateMyTable> 表達式和約束> @FoundMyTable == 0