2016-03-16 31 views
0

我想使用公用表表達式從ODBC服務器到SQL服務器加載增量數據。 當運行在應用Dbeabver查詢,正確執行:如何在ODBC SQLCommand表達式中傳遞SSIS變量?

with test as 
(
    SELECT userid,sum(goldbalance) 
    FROM Server.events_live 
    where eventTimestamp>=DATE '2016-01-01' + INTERVAL '-100 day' 
    group by userid 
    order by sum(goldbalance) desc) 
) 
select * from test 
從ODBC源的SQL命令表達式運行時它

,它由於錯誤的語法失敗。它看起來如下:

with test as 
(
    SELECT userid,sum(goldbalance) 
    FROM deltadna.events_live 
    where eventTimestamp>=DATE '"[email protected][User::datestring]+"' + INTERVAL '-100 day' 
    group by userid 
    order by sum(goldbalance) desc) 
) 
select * from test" 

的datestring變量獲取服務器日期並將其轉換爲字符串格式爲yyyy-MM-DD。我通常使用這種方法從ADO.NET中提取數據,並且它可以正常工作。

是否有任何其他方式使用ssis變量從ODBC服務器中提取增量數據?

+0

我不知道任何其他方式做到這一點,那就是如何我通常做這件事的。提示:將Sql命令表達式放在變量中以便於維護。 – tobypls

回答

2
  • 使用OLE DB

試試這個代碼,它爲我用我自己的SQL Server表:

SELECT userid,sum(goldbalance) AS SUMGOLD 
FROM deltadna.events_live 
WHERE eventTimestamp >= DATEADD(DAY, -100,CONVERT(DATE,?)) 
GROUP BY userid 
ORDER BY SUMGOLD desc 

你必須在OLEDB來源點擊參數編輯器來配置你需要的東西。使用 '?'在查詢中表示一個變量。

Parameters

如果你如果太複雜的查詢,將其存儲在一個存儲過程,這樣稱呼它:「?」

EXEC shema.storedProcedureName ? 

,並映射您變量@user :: DateString

  • 使用ODBC

的表達是在數據流屬性的數據流之外。 選擇表達式屬性並添加動態查詢。

ODBC

而且你的表現會

"SELECT userid,sum(goldbalance) AS SumGold 
FROM deltadna.events_live 
where eventTimestamp>=DATE "[email protected][User::datestring]+" +INTERVAL '-100 day' 
group by userid 
order by SumGold desc" 
+0

除了OLE DB源代碼,僅當使用SQLCommand表達式提取數據時,才能使用參數。這是我使用我的SSIS變量日期字符串的地方。 –

+0

如果你只能使用ODBC,這是使用表達式的唯一方法,我認爲你的變量引用有問題。使用我的測試,如果不起作用,直接添加''你的字符串變量表達式 – Huojian

+0

是的,我也試過了。我只需要在日期字符串變量中插入一個硬編碼的日期,我的腳本將在每次新的執行中替換它的值。不管怎麼說,多謝拉! –