ADO.net源的SSIS Variable SQL命令

时间:2012-10-22 22:38:37

标签: sql sql-server-2008 ssis

虽然这看起来像是一个基本问题,但我一直在试图找到一个有效的解决方案。

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

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

我会将其作为我的WHERE子句追加。  我无法直接从变量中读取ADO.NET数据源而且我不能使用'Expression'属性来设置我的SQL,因为我的SQL查询超过4000个字符。我可以使用一个执行SQL任务来运行我的查询,将结果加载到一个记录集,我假设,然后循环记录集,但这是非常低效的。

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

2 个答案:

答案 0 :(得分: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

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

祝你好运:)

答案 1 :(得分:0)

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

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

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

这是达到你想要的最干净的方式。