【问题标题】:how to create SSIS package to feed values in a 'where in' clause如何创建 SSIS 包以在“where in”子句中提供值
【发布时间】:2013-06-13 17:25:50
【问题描述】:

我对 SSIS 相当陌生... 所以这是我的问题陈述 - 我想创建一个执行以下操作的包..

1) 将 1000 个 ID(主键)的集合分解为 100 个集合,即 100*10 2) 每次获得的 100 个值必须动态输入到变量-'X' 3) 我想在 where in 子句中使用这个变量

示例: 我有一个以“ID”为主键的学生表 我还有一个带有“ID”列的 Rank_Holders 表 select * from Rank_Holders where ID in (?) 是我想要做的。 ?表示映射的变量 - 它应该具有来自学生的 ID 列表。

实际上我在这里有一个大型数据库,一个来自 SQL Server,另一个来自 Oracle,ID 列的数量超过 30000,这就是为什么我需要将它分成块并输入 Where in 子句的原因

一步一步的包创建过程真的很有帮助,请帮忙。

【问题讨论】:

  • 您的问题很难理解,为什么要在 WHERE 子句中包含 100 个值?您要拆分的 1000 个集合是否来自您在下面提到的来自两个来源的 30,000 个?
  • 更大的图景,您正在尝试创建一种分而治之的策略,将数据从一个系统拉到另一个系统?包启动时,会提供 1000 的值。然后包会将其分成 N 个工作桶来并行执行该工作?
  • 大家好,blinkc 是对的,我想将 1000 条记录拆分为 n 个桶,每个桶的值用于与另一个数据源匹配。例如,1000 被拆分为 10 个桶 bucktes 1- 10个将一个接一个循环运行。
  • @Goat_co - 这是一个给出 1000 条记录的示例......我想明确表示我有超过 30000 个值,因为其中有 20000 个条目的限制。我决定拆分总值并将其拆分为循环运行。
  • 这听起来像是一种错误的方法来循环遍历多个子集以提供 WHERE 标准,但我觉得我对您的大局了解不够充分,无法做出有意义的贡献。跨度>

标签: sql ssis package


【解决方案1】:

欢迎新人!意识到您对 SSIS 很陌生,我必须告诉您,您的问题陈述虽然不理想,但具有很强的描述性。很难用几行来描述整个问题。

我很确定您将能够自己弄清楚“逐步”部分。我想给你一些一般的想法。

  1. 主键可能是顺序的,也可能不是顺序的。如果是,那么你很幸运;如果没有,那么您将需要使用 ROW_NUMBER()。示例:

声明@lower int = 10; 声明@upper int = 15;

--DECLARE @CETList varchar(3000); -- 我是putti

带有子集 AS ( SELECT ROW_NUMBER() OVER (ORDER BY RecordID) AS RowNumber , RecordID 来自#A )

--SELECT @CETList = COALESCE(@CETList + ',', '') + CAST(RecordID AS varchar) --来自子集 --WHERE RowNumber BETWEEN @lower AND @upper;

--选择@CETList; --打印@CETList;

SELECT * From UserAudit where RecordID in (SELECT RecordID FROM subset WHERE RowNumber BETWEEN @lower AND @upper );

同样,这还不是一个完整的解决方案。请查看它是否可以帮助您。我把它放在答案部分,因为我需要比 cmets 部分提供的空间更多的空间。

【讨论】:

    猜你喜欢
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    相关资源
    最近更新 更多