【问题标题】:SSIS Variable SQL command for ADO.net sourceADO.net 源的 SSIS 变量 SQL 命令
【发布时间】:2012-10-22 22:38:36
【问题描述】:

虽然这似乎是一个基本问题,但我几天来一直在努力寻找有效的解决方案。

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

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

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

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

【问题讨论】:

  • 将参数值插入表中,然后编写查询以从该表中提取参数值。
  • 我从具有管理员访问权限的服务器上的表中组合参数。问题是我需要使用这些参数在另一台服务器(我只有读取权限)上执行查询。还是您建议我在数据流中创建脚本任务?
  • 不,你想的就是我的意思。
  • 我希望我没有误读,但是我如何将该脚本任务的结果传递给我的 ADO.net 数据源查询呢?
  • 您能否要求该服务器的管理员使用此长查询准备视图,这会将您的查询缩短为select * from viewName where col in ('Frank', 'John', 'Markus', 'Tom')

标签: sql sql-server-2008 ssis


【解决方案1】:

您可以尝试将脚本组件设置为源 - 脚本中的变量和字符串可能超过 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

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

祝你好运:)

【讨论】:

  • 谢谢!我从没想过使用脚本组件作为源,现在我终于有办法以编程方式进行 SSIS 查询:D
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-17
    • 1970-01-01
    相关资源
    最近更新 更多