SSIS:设置(1)inventorycountNr和(2)StoreNr的列表变量,然后在where子句中使用它们

时间:2012-09-22 13:52:23

标签: ssis

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

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

1 个答案:

答案 0 :(得分:0)

您可以在两个数据流中完成。

首先:

  1. 选择要在源表
  2. 中使用的值
  3. 使用Srcipt Component作为逗号分隔列表,将此值存储在字符串变量ListToBeFetched中,作为目标代码类似于:
  4. 
    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);
            }
        }
    }
    

    对第二个清单做同样的事。

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

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