2013-07-01 31 views
3
執行SQL任務

我需要根據參數執行sql任務。 假設我的@parameter = 1,那麼執行這個sql如果@parameter = 2,那麼執行這個sql。我想到一個解決方法,但有什麼簡單的,如Len(?)或Len(@ parameter1)..SSIS使用參數

底線:我需要執行基於傳遞給參數的sql查詢。 讓我知道這是可能的。

+0

IF @ parameter = 1 BEGIN ... query ... END IF IF parameter = 2 ... ...'? – Lamak

+0

這正是我想要做的,但看起來不起作用。它工作還是我想念什麼... – user1810575

+0

感謝您的迴應拉瑪克。它是OLE DB連接,你能發給我正確的語法嗎?不知何故,我無法得到它的工作。 – user1810575

回答

2

如果你想要一個執行SQL任務運行基於變量的不同的存儲過程,則有幾個選項:

  1. 您可以創建一個存儲過程,需要一個參數。存儲過程將使用IF ELSE代碼來執行代碼,如Lamak的評論中所述。如果你想執行不同的存儲過程,這是一個不太理想的解決方案。如果只有極少數的查詢或存儲過程執行,這可能會有效。

  2. 你可以寫,計算基於表達式存儲過程的名稱的變量。如果你只有幾個存儲過程可以執行,這可能會很好,但是它不能爲大量的存儲過程進行擴展。從編碼的角度來看,很難理解,特別是如果表達式很複雜。

  3. 您可以編寫生成一個單獨的存儲過程調用命令查詢或存儲過程。你可以運行一個執行SQL任務來加載一個結果集。結果集將映射到Object數據類型的變量。然後,您可以遍歷For Each Container中的變量以將值分配給變量。如果你有很多不同的代碼,比100個表達式更容易管理。

基於對我的評論聽起來像是你想嘗試選項2以下是選項2的詳細步驟:

  1. 在變量窗口在包級創建範圍一個名爲SqlCommand的數據類型爲String的變量。

  2. 設置爲SqlCommand的變量爲True EvaluateAsExpression財產。

  3. 單擊表達式生成器鏈接。

  4. 以下是一個示例IF使用條件運算符THEN ELSE表達。

    1 == 0? 「SELECT SomeField = GETDATE();」 :「SELECT SomeField = GETDATE() - 2;」

    如果1等於0,則返回第一個命令。如果1不等於0,那麼第二個命令將被返回。在這種情況下,由於1不等於0,所以返回第二個命令。您可以將1 == 0部分更改爲您實際想要評估的條件。

  5. 將一個執行SQL任務添加到控制流。

  6. 打開執行SQL任務編輯器。

  7. 將連接設置爲您所需的數據庫連接管理器。

  8. 設置SQLSourceType =變量。

  9. 將SourceVariable設置爲User :: SqlCommand。

  10. 關閉編輯器並測試軟件包。

+0

某些原因我不能存儲Proc。是否有可能做這樣的事情讓我知道.. IF @ parameter = 1 BEGIN ... query ... END IF @ parameter = 2 ... – user1810575

+0

我提供了上面的代碼示例,在沒有存儲的情況下執行此操作使用選項2的過程。如果您正在嘗試做其他事情,請告訴我。 –

1

user1810575再次問這個問題在ssis-execute-sql-task-based-on-parameter,看到我的回答(這是複製在這裏爲好)。

您不能使用執行SQL任務來運行Transact-SQL語句。

用於根據您要實現的內容設置條件SQL語句。

在執行SQL任務編輯器

  • 在常規選項卡,離開的SQLStatement空白。
  • 在參數映射選項卡,添加參數和地圖用戶::參數變量參數名稱0
  • 在表達式標籤中,設置SQLStatementSource到

    (DT_NUMERIC,18,0)@ [用戶::參數] == 1? ...查詢1 ...:...查詢 2 ...