0

1.脚本任务:设置(A)库存计数和(B)StoreNr的数组 2.数据流任务:在where子句中使用列表变量(过滤,从而提高性能)

*脚本任务必须从服务器 A 读取,数据流任务必须从服务器 B 读取。我不想使用链接服务器,也不想过滤下游数据流,而是想通过数据流源 (OLE DB) 中的 where 子句进行过滤。

4

1 回答 1

0

您可以在两个数据流中执行此操作。

在第一:

  1. 从源表中选择要在 where 中使用的值
  2. 将此值存储在字符串变量ListToBeFetched中作为逗号分隔的列表,使用 Srcipt 组件作为目标女巫代码,类似于:

using System.Text;
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
    StringBuilder sb;
    public override void PreExecute()
    {
        base.PreExecute();
        sb = new StringBuilder();
    }

    public override void PostExecute()
    {
        base.PostExecute();
        Variables.IdListToBeFetched = sb.ToString().TrimEnd(',');
    }

    public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
        if (!Row.Value_IsNull)
        {
            sb.AppendFormat("{0},", Row.Value);
        }
    }
}

对第二个列表执行相同操作。

在第二个数据流中,将动态生成的查询设置为 sql 命令OLE DB Source(取自Jamie Thomson 博客):

  1. 创建一个名为 SourceSQL 的新变量
  2. 打开 SourceSQL 变量的属性窗格(按 F4)
  3. 设置 EvaluateAsExpression=TRUE
  4. 设置Expression"select * from table where columnToBeSearched in (" + @[User::ListToBeFetched] + ")"
  5. 对于您的 OLE DB 源组件,打开编辑器
  6. 设置数据访问模式="来自变量的 SQL 命令"
  7. 设置变量名 = "SourceSQL"
于 2012-09-23T16:07:47.677 回答