如何在ODBC SQLCommand表达式中传递SSIS变量?

时间:2016-03-16 09:57:35

标签: sql-server ssis odbc

我正在尝试使用公用表表达式将增量数据从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服务器提取增量数据?

1 个答案:

答案 0 :(得分:6)

  • 使用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 "+@[User::datestring]+" +INTERVAL '-100 day'
group by userid
order by SumGold desc"