【问题标题】:SSIS Lookup task - setting the SQL Command programaticallySSIS 查找任务 - 以编程方式设置 SQL 命令
【发布时间】:2013-09-24 03:19:21
【问题描述】:

在尝试使用 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

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

【问题讨论】:

  • 当您查看包的原始 XML 代码时,PropertyExpression 值是否设置为任何值?

标签: c# ssis


【解决方案1】:

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

类似

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

应该会更好。

更新:首先让我们弄清楚术语。

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

您要影响的属性是 MyLookup 任务的 SqlCommand 属性。 您可以通过三种方式影响这一点:

  1. 直接在查找任务上设置属性。
  2. 直接在包含查找任务的数据流任务上设置属性 [MyLookup].[SqlCommand]。
  3. 在数据流任务中设置 [MyLookup].[SqlCommand] 属性的表达式值。

第 1 点和第 2 点正在修改完全相同的属性 - 查找任务的 SQLCommand 属性。如果您更改其中任何一个,您可以在 GUI 的另一个框中看到更改的结果。该值本身仅存储在 XML 中的一处 - 作为 Lookup 组件元素的 SQLCommand 属性元素的文本值。

第三个比较棘手。当您在 GUI 中设置它时,它还将计算表达式的值设置为查找任务的 SQLCommand 属性。它在引擎盖下做到了这一点。当您以编程方式执行此操作时,它不会执行此底层评估和属性设置,因此会导致您的错误。

这与您在数据流任务上设置 [MyLookup].[SqlCommand] 属性时遇到的问题相同 - 不会传播到查找任务。

【讨论】:

  • Expression 确实变了,但是在设计器中打开时并没有显示在 Lookup 任务中。
  • 更新以解释正在发生的事情。
  • 为什么在您的原始问题中直接在查找任务上设置 SQLCommand 属性不起作用?此外,我强烈推荐 EzAPI 作为一种更简单直接的工具,用于以编程方式构建 SSIS 包。
  • 那很不幸;我希望这在编程上是可能的。感谢您的帮助凯尔。
  • 确实如此,或者更确切地说,我一直设置 EzLookups 的 SqlCommand 属性没有问题。
猜你喜欢
  • 2011-07-22
  • 2010-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 2019-06-19
  • 1970-01-01
相关资源
最近更新 更多