1

C# を使用して SSIS で SQLCommand をルックアップ タスクにプログラムで設定しようとすると、回避策が見つかりました。

元の問題: 設計時にルックアップ タスクを介して直接

        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 の値を設定できるようにするという考えだと思います。

4

1 に答える 1

3

タスク プロパティを直接設定するのではなく式を設定するため、クエリを引用符で囲んで式を適切に設定し、SSIS で評価できるようにする必要があります。

だから何か

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

おそらくうまくいくはずです。

更新: まず、用語を正しく理解しましょう。

SSIS には、式とプロパティがあります。

影響を与えるプロパティは、MyLookup タスクの SqlCommand プロパティです。これには、次の 3 つの方法で影響を与えることができます。

  1. ルックアップ タスクでプロパティを直接設定します。
  2. ルックアップ タスクを含むデータ フロー タスクにプロパティ [MyLookup].[SqlCommand] を直接設定します。
  3. データ フロー タスクで [MyLookup].[SqlCommand] プロパティの式の値を設定します。

ポイント番号 1 と 2 は、まったく同じプロパティ (ルックアップ タスクの SQLCommand プロパティ) を変更しています。どちらかを変更すると、GUI のもう一方のボックスで変更の結果を確認できます。値自体は、ルックアップ コンポーネント要素の SQLCommand プロパティ要素のテキスト値として、XML の 1 か所にのみ格納されます。

3 つ目はよりトリッキーです。GUI で設定すると、評価された式の値が Lookup タスクの SQLCommand プロパティにも設定されます。これは内部で行われます。これをプログラムで行うと、この内部評価とプロパティ設定が行われないため、エラーが発生します。

これは、データ フロー タスクで [MyLookup].[SqlCommand] プロパティを設定したときに発生する問題と同じです。ルックアップ タスクに伝達されません。

于 2013-09-22T02:39:14.053 に答える