【问题标题】:sql query with in clause in oledb source ssisoledb源ssis中带有in子句的sql查询
【发布时间】:2020-02-22 15:00:53
【问题描述】:

希望每个人都做得很好。我是 ssis 的新手,我被严重卡住了。

我有一个 ssis 包,它有一个 Oracle oledb 源和 sql server oledb 目标。 oracle oledb 源有一个参数化的 sql 查询。

我有一个字符串变量 @resultset,其中包含一个逗号分隔的 id 列表,我从执行 sql 任务对象变量中解析了该列表。 @resultset 的值是这样的 111,2222,333,444

我需要将此字符串变量提供给参数化源查询中的 in 子句。

我正在使用来自 oledb 源中变量的 sql 命令。我已将查询作为表达式存储在一个名为 @setquery.

的变量中

查询是这样的:

"从 oracledb.table 中选择 col1, col2, ...coln where colid in (" + @resultset + ")"

但是当我尝试查看列时出现错误。“无法从数据源检索列信息”

我读到我可以使用动态 sql 并尝试过,但我无法正确使用。

我正在使用 sql server 2017 和 Visual Studios for ssdt 2017。

你能帮忙吗!

谢谢!

【问题讨论】:

    标签: tsql ssis


    【解决方案1】:

    尝试将 OLEDB 设置:AlwaysUseDefaulCodePage 设置为 True! 祝你好运

    【讨论】:

    • 嗨,我使用了两个变量 sqlstr 和 params 并使用这个表达式 @[User::sqlstr] + " where id in ("+ @[User::params]+")" ,它有效!
    • 嗨@abdelilah..谢谢你的建议。由于我的源查询在 ORacle 中,因此我收到一个错误,in 子句中允许的文字数不超过 1000 个。所以我将不得不在 in 子句中使用一个 select 语句。我再次陷入困境,因为我放入 oracle 查询的 in 子句中的数据来自 sql server。
    • 我发布了一个新问题,因为我认为我需要从头开始。 stackoverflow.com/q/58627479/12278561
    • 我也有同样的问题,in 语句中有 85,000 个 ID。我将使用 SQL 一次创建 1000 个 ID 的批次,并使用 FOR EACH LOOP CONTAINER 进行迭代
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    相关资源
    最近更新 更多