2

虽然这似乎是一个基本问题,但我几天来一直在扯头发,试图找到一个有效的解决方案。

我在服务器上有一个值查找表,我使用 C# 脚本任务从中读取并组装成一个字符串。我将此字符串写入一个变量,我想在我的数据流中的 ADO.NET 数据源(来自我只有读取权限的不同服务器)上的大型 SQL 查询中将其作为 WHERE 参数传递。例如,这个字符串就像

  ('Frank', 'John', 'Markus', 'Tom')

我会将其附加为我的 WHERE 子句。我不能直接从 ADO.NET 数据源的变量中读取数据,也不能使用“表达式”属性来设置我的 SQL,因为我的 SQL 查询超过 4000 个字符。我可以使用执行 SQL 任务来运行我的查询,将结果加载到记录集中并假设,然后循环遍历记录集,但这非常低效。

最好的方法是什么?我的最终目标是将这些结果放在第一台服务器上的表中。

4

2 回答 2

2

您可以尝试将脚本组件设置为源 - 脚本中的变量和字符串可能超过 4000 个字符,因此您可以将查询放入其中。

设置类似于本文的组件:http: //beyondrelational.com/modules/2/blogs/106/posts/11119/script-componentsource-part1.aspx 在这篇文章中,您有示例如何使用获取数据ExecuteReader并将其放入脚本组件的输出:http: //beyondrelational.com/modules/2/blogs/106/posts/11124/ssis-script-component-as-source-adonet.aspx在这个你有说明如何正确获取连接:http://www.toadworld.com/platforms/sql-server/b/weblog/archive/2011/05/30/use-connections-properly-in-an-ssis-script-task

通过加入这些信息,您应该能够编写您的源脚本组件,该组件可以使用任何长度的动态构造查询来获取数据。

祝你好运 :)

于 2012-10-22T23:48:05.260 回答
0

您可以执行一个简单的select语句来返回将包含的值列表('Frank', 'John', 'Markus', 'Tom')。所以你select会回来:

Name
----------
Frank
John
Markus
Tom

然后,在 SSIS 中,在主查询中使用 a Merge Join Component(将充当 a INNER JOIN)而不是 where 子句。

这是实现您想要的最干净的方法。

于 2012-10-23T13:22:53.040 回答