簡體   English   中英

未使用 ODBC 連接從源獲取數據並從變量傳遞 SQL 查詢

[英]Data not getting fetched from Source using ODBC Connection and passing the SQL Query from a variable

我有一個源查詢,其中我使用 ODBC 連接從 Horton 獲取數據

Select * from Table1 Where CreationDate > '2020-09-24 00:00:001'

當我手動運行此查詢時,它運行良好,但是當我運行我的 SSIS Package 時,沒有獲取任何數據。

請注意,我正在從變量傳遞此 SQL 查詢,並且所有變量都已正確傳遞。 我已經使用編輯斷點對其進行了檢查。

這是我從變量傳遞查詢所遵循的步驟

您的查詢問題似乎是將 SSIS DateTime 類型轉換為字符串表示形式的默認格式。 ODBC 源似乎需要YYYY-MM-DD hh:mm:ss:mss (其中 mss 是毫秒,但不是正確的格式代碼)。

我傾向於將我的長表達式分解為多個變量,然后有一個“簡單”的最終形式將它們放在一起。

Date_YYYYMMDD -> (DT_WSTR, 4)  YEAR(@[System::ContainerStartTime]) + "-" + RIGHT("0" + (DT_WSTR, 2)  MONTH(@[System::ContainerStartTime]),2)  + "-" + RIGHT("0" + (DT_WSTR, 2)  DAY(@[System::ContainerStartTime]),2)

這構建了我的 YYYY-MM-DD 格式字符串。 數據類型為String

Date_HHMMSSms -> RIGHT("0" + (DT_WSTR, 2) DATEPART( "Hour", @[System::ContainerStartTime] ),2) + ":" +  RIGHT("0" + (DT_WSTR, 2) DATEPART( "Minute", @[System::ContainerStartTime] ),2) + ":" +  RIGHT("0" + (DT_WSTR, 2) DATEPART( "Second", @[System::ContainerStartTime] ),2) + ":" +  RIGHT("0" + (DT_WSTR, 3) DATEPART( "Millisecond", getdate() ),3)

這構建了時間組件。 我一直提倡使用系統變量ContainerStartTime而不是 GETDATE(),因為每次我們訪問它時都會評估 getdate,而容器啟動時間對於執行 package 是恆定的。我發現並且迫不及待想寫博客的是表達式語言似乎無法從 ContainerStartTime 中獲取毫秒數,但對於 GETDATE() 調用可以正常工作。

最終日期變量然后變成類似

Date_Filter -> @[User::Date_YYYYMMDD] + " " + @[User::Date_HHMMSSms]

然后使我的查詢用法看起來像

Query_Source -> "Select * from Table1 Where CreationDate > '" + @[User::Date_Filter] + "'"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM