2012-10-02 58 views
2

我正在使用ADO.NET源將數據從ODBC服務器傳遞到我的SQL。 我使用導入和導出嚮導來創建我的數據流任務。SSIS流程ADO.net源任務參數

我需要追加有場GPMTADDT>(昨日日)新記錄 例如,如果今天20121002下面的查詢工作完美:

SELECT PARTICIP.* 
FROM PARTICIP 
WHERE GPMTADDT > 20121001 

我想:

SELECT PARTICIP.* 
FROM PARTICIP 
WHERE GPMTADDT > Format(now(),"yyyymmdd") 

但將無法工作,服務器將「格式」視爲一列。 我試圖創建一個變量@date

SELECT PARTICIP.* 
FROM PARTICIP 
WHERE GPMTADDT > @date 

服務器再次拒絕了 「@」。

Also tried: 
SELECT PARTICIP.* 
FROM PARTICIP 
WHERE GPMTADDT > (SELECT MAX PARTICIP.GPMTADDT FROM PARTICIP) 

我確定我缺少一些簡單的東西,將不勝感激。

謝謝!

回答

1

你試過:

SELECT PARTICIP.* 
FROM PARTICIP 
WHERE GPMTADDT > DATEADD(dd, -1, GETDATE()) 
+0

它不工作,它說「DATEADD不是一個有效的列」,它看起來像它傳遞查詢,因爲它是在沒有首先運行該功能的服務器。 –

+0

你在使用什麼數據庫? –

0

您還沒有提到你的數據源實際上是,但似乎有幾個錯誤的SQL語法你試過。例如第一個查詢在日期應該有單引號,最後一個應該把參數放在括號裏面MAX()

但是爲了試圖回答你的基本問題,ADO.NET源碼不支持參數,與OLE DB不同這樣做。一些可能的解決方案是:

  1. 不要使用參數,如果你能生成源本身的價值;這就是你想在你的最後一個例子可以做,什麼傑夫建議
  2. 使用SSIS的表達與SSIS的變量(如描述here
  3. 作爲替代設置連接對象的SqlCommand財產,一起到#2,使用腳本任務,以構建完整的SELECT查詢,將其分配給一個SSIS變量,然後使用該變量作爲SqlCommand

個人而言,我會說,選項1是最簡單的,但當然如果該變量不能從源系統內訪問,則不總是可能的。 2和3是同一解決方案的變體,但我更喜歡3,因爲我發現編寫腳本比使用表達式更容易。