我有一个SSIS 2008包,其中包含使用Task Factory Salesforce.com源的数据流任务,而在WHERE子句中是以下语句,它可以正常工作。
WHERE SystemModstamp > <@User::dt_last_success>
我想拉出条件'IF @ load_all_data = True那么不包括上面的WHERE子句,如果是False则包含它。我被告知在Salesforce对象查询语言(SOQL)中不可能将该逻辑包含在上述查询*的WHERE子句中,这意味着我需要两个独立的数据源:一个具有当前的WHERE。一个没有。
我不想复制粘贴每个数据流任务,唯一不同的是WHERE子句,以便将其关闭。
问题:在数据流任务中使用相同目的地的基于逻辑的两个源的最简单方法是什么?最好没有需要分类的JOIN。
提前致谢。 吉姆
答案 0 :(得分:0)
我不熟悉TaskFactory的Salesforce.com源代码,但大多数SSIS都允许将表达式的概念应用于它们。查看SFDC的文档并了解PW人员,他们肯定允许这样做。
创建一个类型为boolean的变量LoadAllData
并将其设置为False
创建第二个变量,类型为string,名为Query
。然后,您需要将EvaluateAsExpression
属性设置为True,然后使用如下表达式(注意双引号是Expression的一部分。
"SELECT MyCols FROM MyTable "
+ (@[User::LoadAllData]) ? "" : "WHERE SystemModstamp > <@User::dt_last_success>"
这将为SELECT MyCols FROM MyTable
构建满载的查询,SELECT MyCols FROM MyTable WHERE SystemModstamp > <@User::dt_last_success>
用于增量加载。
一旦你验证字符串是否正常工作,正如预期的变量切换,你进入你的数据流,右键单击SFDC源,在Expressions下,应该有一些与SalesForceQuery对应的东西然后你分配作为其值@[User::Query]
将所有内容捆绑在一起,然后在运行包时使用/SET属性,以便在需要满载时将LoadAllData的值翻转为True(我认为这是异常,而不是标准案例)。
dtexec /file ./SFDC.dtsx /Set \Package.Variables[User::LoadAllData].Properties[Value];1
^^^这是近似的。我还没有尝试从命令行设置一个布尔值,所以它可能期望True,true或者可能是TRUE。您的快速实验应该揭示具体的语法。