2014-07-22 25 views
0

我是SSIS的新手,所以如果這個問題很微不足道或已經得到解答,請原諒我。所以,我有如下開頭SQL查詢:SSIS中的SQL變量變更

declare @start datetime, @end datetime, @startMonth datetime, @endMonth datetime, @maxHoursToRespond int 
    ----Set These------------------------------------------------ 
    set @end='6/27/2014' 
    set @maxHoursToRespond=24      
    ------------------------------------------------------------- 
    set @start=dateadd(dd, -90, @end) -- set duplication period 
    set @startMonth=dateadd(dd, -2, @end)-- set to start date of output you want 
    set @endMonth=dateadd(dd, -1, @end) -- set to day of end date of output you want 

當我把這個在我的OLE DB源代碼編輯器與SQL命令作爲我的數據訪問模式, 所有變量都被替換爲問號。 它看起來像:

DECLARE ? datetime, ? datetime, ? datetime, ? datetime, ? int 
/*--Set These------------------------------------------------*/ SET ? = ? 
SET   ? = 24 
/*-----------------------------------------------------------*/ SET ? = dateadd(dd, -  90, ?) 
SET   ? = dateadd(dd, - 2, ?) 
SET   ? = dateadd(dd, - 1, ?) 

在查詢builder.I'd想知道這是爲什麼happening.I'd也想知道我怎麼能允許查詢能夠成功的建立 (目前我得到的「Declare SQL構造或語句不支持」的語法錯誤。)。 我是否必須在SSIS中創建這些變量(如@start)?

+0

這裏是關於SSIS參數和變量的主題:https://www.simple-talk.com/sql/ssis/ssis-basics-introducing-variables/ – Darka

+0

也許你應該使用'執行SQL任務'。以下是一些更多信息https://www.simple-talk.com/sql/ssis/ssis-basics-using-the-execute-sql-task-to-generate-result-sets/ – Darka

回答

1

您可以:

  1. 封裝中包含的所有聲明內(假設變量的值是靜態的)的存儲過程,你的SQL,然後調用與EXEC執行SQL任務的存儲過程。 EXEC My_Stored_Procedure
  2. 編寫一個接受變量作爲輸入的存儲過程,將它們映射到SSIS中的變量,然後執行存儲過程,如Exec My_Stored_Proc ?,?,?,?,並將用戶變量映射到相應的存儲過程變量。
  3. 保持原樣查詢,但刪除DECLARE和SET,並將SSIS變量映射到查詢。這很可能不起作用,因爲SSIS不知道哪個?對應於哪個變量(它會嘗試按照它們出現的順序映射它們)

數字2是普遍接受的方法,除非您將變量值存儲在表中或SP中的數字可以訪問,在這種情況下的數字1可更清潔。

1

我在OLE DB Source Editor和什麼也沒有改變粘貼直SQL command text你的腳本。通過按Parse Quesry..我檢查了SQL是正確的。當我試圖用Build Query..,它說,這不支持DECLARE。所以不要使用建設者:)

enter image description here