SSIS查找任务 - 以编程方式设置SQL命令

时间:2013-09-20 19:29:13

标签: c# ssis

我尝试使用C#以编程方式将SQLCommand设置为SSIS中的查找任务时找到了解决方法。

原始问题:直接通过设计时的查找任务

        CManagedComponentWrapper designTime = lookupTask.Instantiate();
        designTime.ProvideComponentProperties();
        designTime.SetComponentProperty("SqlCommand", lookupQuery);
        designTime.SetComponentProperty("SqlCommandParam", lookupQuery);

新问题:通过承载查找转换任务的数据流任务:

        satelliteDft.SetExpression("[MyLookup].[SqlCommand]", lookupQuery);
        satelliteDft.SetExpression("[MyLookup].[SqlCommandParam]", lookupQuery);

问题在于,即使在执行数据流任务时,当我打开新创建的包时,select语句也不会显示在查找任务中。

编辑:

以下解决方案不会修改查找任务中的实际值,即使数据流属性确实已更改。可在数据流任务中修改的属性如下:

[MyLookup].[SqlCommand]
[MyLookup].[SqlCommandParam]
AutoGenerateIDForNewObjects
BLOBTempStoragePath
BufferManager
BufferTempStoragePath
ComponentMetaDataCollection
CreationName
DefaultBufferMaxRows
DefaultBufferSize
DelayValidation
Description
Disable
DisableEventHandlers
EngineThreads
EventHandlers
EventInfos
Events
ExecutionDuration
ExecutionResult
ExecutionStatus
FailPackageOnFailure
FailParentOnFailure
ForcedExecutionValue
ForceExecutionResult
ForceExecutionValue
ID
IsDefaultLocaleID
IsolationLevel
LocaleID
LogEntryInfos
LoggingMode
LoggingOptions
MaximumErrorCount
Name
Parent
PathCollection
RunInOptimizedMode
StartTime
StopTime
TransactionOption
VariableDispenser
Variables

我认为这个想法是能够使用其中一个来设置Expression的值。

1 个答案:

答案 0 :(得分:3)

由于您是直接设置表达式而不是任务属性,因此您必须将查询放在引号中,以便正确设置表达式并由SSIS进行评估。

类似

satelliteDft.SetExpression("[MyLookup].[SqlCommand]", string.Format("\"{0}\"", lookupQuery));

应该更好。

更新:首先让我们直接使用术语。

在SSIS中,有表达式,还有属性。

您要影响的属性是MyLookup任务的SqlCommand属性。 您可以通过三种方式对此产生影响:

  1. 直接在查找任务上设置属性。
  2. 直接在包含查找任务的数据流任务上设置属性[MyLookup]。[SqlCommand]。
  3. 在数据流任务中设置[MyLookup]。[SqlCommand]属性的表达式值。
  4. 第1点和第2点正在修改完全相同的属性 - 查找任务的SQLCommand属性。如果更改其中任何一个,您可以在GUI中的另一个框中看到更改的结果。值本身仅存储在XML中的一个位置 - 作为Lookup组件元素的SQLCommand属性元素的文本值。

    第三个比较棘手。当您在GUI中设置它时,它还将计算表达式的值设置为Lookup任务的SQLCommand属性。它是在引擎盖下完成的。当您以编程方式执行此操作时,它不会在引擎盖评估和属性设置下执行此操作,从而导致您的错误。

    这是您在数据流任务上设置[MyLookup]。[SqlCommand]属性时遇到的问题 - 该问题未传播到Lookup任务。