【问题标题】:How to pass SSIS variables in ODBC SQLCommand expression?如何在 ODBC SQLCommand 表达式中传递 SSIS 变量?
【发布时间】:2016-03-16 09:57:34
【问题描述】:

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

从 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 服务器中提取增量数据吗?

【问题讨论】:

  • 我不知道有什么其他方法可以做到这一点,我通常也是这样做的。提示:将 Sql 命令表达式放在变量中以便于维护。

标签: sql-server ssis odbc


【解决方案1】:
  • 使用 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 源代码编辑器中的参数来配置您需要的内容。使用 '?'在您的查询中表示一个变量。

如果查询太复杂,可以存储在存储过程中,这样调用:

EXEC shema.storedProcedureName ?

并映射“?”到你的变量@user::DateString

  • 使用 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"

【讨论】:

  • 除了 OLE DB 源之外,在提取数据时不能使用参数 - 只能使用 SQLCommand 的表达式。这是我使用 SSIS 变量 datestring 的地方。
  • 如果您只能使用 ODBC,这是使用表达式的唯一方法,我认为您的变量引号有问题。用我的测试一下,如果不行,直接在你的字符串变量表达式中加''
  • 是的,我也试过了。我只需要在 datestring 变量中插入一个硬编码的日期,我的脚本就会在每次新的执行中替换它的值。无论如何,谢谢!
  • ODBC 示例的图片很有帮助。我很难在属性树中找到“表达式”元素。
猜你喜欢
  • 1970-01-01
  • 2012-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-22
  • 2017-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多