【问题标题】:SSIS 2008: Conditional logic to use different sources in Data Flow TaskSSIS 2008:在数据流任务中使用不同源的条件逻辑
【发布时间】:2014-12-01 16:39:33
【问题描述】:

我有一个使用 Task Factory Salesforce.com 源的带有数据流任务的 SSIS 2008 包,并且在 WHERE 子句中是以下语句,它工作正常。

WHERE SystemModstamp > <@User::dt_last_success>

我想提出一个条件 'IF @load_all_data=True THEN 不包括上述 WHERE 子句,如果 False 则包括它。有人告诉我,在 Salesforce 对象查询语言 (SOQL) 中,不可能在上述查询*的 WHERE 子句中包含该逻辑,这意味着我需要两个单独的数据源:一个包含当前 WHERE。 .,一个没有。

我不希望复制粘贴每个数据流任务,唯一不同的是 WHERE 子句来实现这一点。

问题:在数据流任务中基于带有参数的逻辑,使用相同的目的地,最简单的方法是什么?最好没有需要排序的 JOIN。

提前致谢。 吉姆

【问题讨论】:

    标签: ssis salesforce soql


    【解决方案1】:

    我不熟悉 TaskFactory 的 Salesforce.com 源代码,但大多数 SSIS 事物都允许将表达式的概念应用于它们。查看SFDC 的文档并了解 PW 人员,他们肯定允许这样做。

    创建一个变量,LoadAllData,布尔类型并将其设置为 False

    创建第二个字符串类型的变量,称为Query。然后,您需要将 EvaluateAsExpression 属性设置为 True,然后使用如下表达式(注意双引号是表达式的一部分。

    "SELECT MyCols FROM MyTable "
    + (@[User::LoadAllData]) ? "" : "WHERE SystemModstamp > <@User::dt_last_success>"
    

    这将为完整加载构建SELECT MyCols FROM MyTable 查询,为增量加载构建SELECT MyCols FROM MyTable WHERE SystemModstamp &gt; &lt;@User::dt_last_success&gt;

    一旦您确认字符串正常工作,正如预期的那样使用变量切换,您然后进入您的数据流,右键单击 SFDC 源并在表达式下,应该有与 SalesForceQuery 对应的内容,然后您分配作为它的值@[User::Query]

    将这一切联系在一起,然后在运行包时使用 /SET 属性,以便在需要完全加载时将 LoadAllData 的值翻转为 True(我认为这是例外情况,而不是标准情况) .

    dtexec /file ./SFDC.dtsx /Set \Package.Variables[User::LoadAllData].Properties[Value];1
    

    ^^^ 那是大概的。我没有尝试从命令行设置布尔值,因此它可能期望 True、true 或可能为 TRUE。您的快速实验应该会揭示具体的语法。

    【讨论】:

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