我正在尝试使用公用表表达式将增量数据从ODBC服务器加载到SQL Server。 在Dbeabver应用程序中运行查询时,执行正确:
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 '"+@[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 :(得分:6)
尝试使用此代码,它适用于我自己的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源编辑器中的参数来配置您需要的内容。使用 '?'在查询中表示变量。
如果查询是否过于复杂,请将其存储在存储过程中并按如下方式调用:
EXEC shema.storedProcedureName ?
并映射'?'变量@user :: DateString
表达式位于数据流属性中的数据流之外。 选择表达式属性并添加动态查询。
你的表达将是
"SELECT userid,sum(goldbalance) AS SumGold
FROM deltadna.events_live
where eventTimestamp>=DATE "+@[User::datestring]+" +INTERVAL '-100 day'
group by userid
order by SumGold desc"