2013-07-02 161 views
2

我可以做類似下面的事情,讓我知道 IF @ parameter = 1 BEGIN ... query ... END IF @ parameter = 2 需要正確的語法(如果可能的話)。 它是OLE DB連接。 不是存儲過程。只是一個SQL查詢SSIS根據參數執行SQL任務

回答

2
DECLARE @param AS INT = ?; 

IF @param = 1 
BEGIN 
    SELECT 1 AS Y; 
END 
ELSE IF @param = 2 
BEGIN 
    SELECT 2 AS Y; 
END 

有在查詢兩個問號,也許你只傳遞一個變量。我看過開發者傳遞兩次(或多次)相同值的代碼。這是低效的。更好的方法是接收SSIS變量中傳遞的參數。優點: 1.您只需要傳遞一個值一次。 2.更重要的是,如果您更改了在sql中使用傳遞的參數的順序,則不需要在執行SQL任務編輯器//參數的用戶界面上更改它們的順序。這就是安迪倫納德後來在他的迴應中提出的建議。

0

你可以。假設您引用的是執行SQL任務,則使用OLE DB連接的執行SQL任務中的參數將使用問號(?)作爲參數佔位符。您可以在執行SQL任務的「參數映射」頁面上將佔位符映射到SSIS變量。在將SQLStatement屬性,您需要輸入:(?= 1)(?= 2)

如果 開始 ... {這裏的一些T-SQL} ... 結束 如果 開始 ... {一些T-SQL在這裏} ... 結束

這是一種完成我認爲你所要求的方式。

另一種方法是創建一個執行SQL任務,將@parameter的值從數據庫讀取到SSIS變量中。然後,您可以構建兩個執行SQL任務 - 一個與T-SQL的每個選項一起作爲SQLStatement屬性 - 並在先行約束上使用表達式來確定執行哪個執行SQL任務。

希望這有助於 :{>

+0

If(?= 1)begin ... {some T-SQL here} ... end If(?= 2)開始... {一些T-SQL在這裏} ...結束 上面的SQL作品??我收到「無法解析」錯誤。拍攝我正確的語法 – user1810575

0

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

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

在執行SQL任務編輯器

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

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