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

nim*_*her 2 sql-server odbc ssis

我正在尝试使用公用表表达式将增量数据从ODBC服务器加载到SQL服务器.在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
Run Code Online (Sandbox Code Playgroud)

从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"
Run Code Online (Sandbox Code Playgroud)

datestring变量获取服务器日期并将其转换为格式为yyyy-mm-dd的字符串.我通常使用这种方法从ADO.NET中提取数据并且它可以正常工作.

有没有其他方法可以使用ssis变量从ODBC服务器提取增量数据?

Huo*_*ian 7

  • 使用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
Run Code Online (Sandbox Code Playgroud)

您必须单击OLEDB源编辑器中的参数来配置所需的内容.使用 '?' 在查询中表示变量.

参数

如果您查询是否太复杂,将其存储在存储过程中并像这样调用它:

EXEC shema.storedProcedureName ?
Run Code Online (Sandbox Code Playgroud)

并映射'?' 到您的变量@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"
Run Code Online (Sandbox Code Playgroud)

  • ODBC 示例的图片非常有帮助。我很难在属性树中找到“表达式”元素。 (3认同)