迭代并从SSIS中的Object获取固定数量的结果

时间:2015-08-11 13:26:40

标签: sql-server oracle loops object ssis

我在SSIS中查询了这个问题。从SQL Server中的表中我获得了超过25000个不同的标识符。这些标识符与一个Oracle数据库中的表中的许多值相关联。这是我为此执行的架构。

enter image description here

问题是有时候标识符可能超过45000,并且此时为每个标识符执行循环不是最佳解决方案(可能需要很长时间才能获得结果)。以前我已经执行了另一个查询,其中从SQL语句,我创建并发送一个唯一的行与所有值连接,然后我从一个对象恢复这个唯一的字符串,并使用它来创建调用ODBC源中的查询Oracle中的表:类似这样:

'从Oracle_table'中选择* + @string_values

使用@string_values ='其中值为(........)'。它工作得很好,因为值的数量足够小,可以使用,例如250.但在这种情况下,我不能使用这种方法,因为数字非常大,显然Oracle的DBA将取消查询。

所以我想知道,我怎样才能遍历每次只获得少量数值的对象,例如300或最大500,以避免取消查询但同时进行最小数量的循环。或者,如果有其他解决方案,我将非常感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

好的,你可以做的是循环遍历每个单独的标识符并构建一个字符串以与“WHERE值IN(...)”子句一起使用。

创建一个循环,您可以获得尽可能多的标识符,而不会导致“WHERE值IN(...)”变得太大。所以说你得到前100名或者200名或者多少。

编辑:执行上述操作的一种方法是使用变量进行循环控制。如果你想一次100个,那么从100开始变量。使用它来获得ROW_NUMBER()的标识符在1到100之间(查询中的逻辑类似于:BETWEEN (MyVariable - 99) AND MyVariable)。然后在循环结束时,将变量的值增加100。

使用此方法,您的唯一循环是针对变量的。您的查询构建了一串标识符。这是一个例子:

Concatenate many rows into a single text string?

您使用该字符串构建使用WHERE value IN (The string of identifiers)

的Oracle查询

对Oracle运行“WHERE IN”查询,将该数据存储在SQL或内存中,然后循环并获取下一批标识符。重复循环,直到您完成所需的所有标识符。