2011-12-02 12 views
1

このタスクおよび他のサイトの提案に従って、スクリプトタスクを使用してファイルが存在するかどうかを確認しました。ファイルが存在しない場合、私はいくつかの異なる処理をしたくない限り、コードは完全に機能します(ファイルが存在する場合のみステップが実行されます)。ファイルが存在しないときに別の処理に分岐しようとすると、そのブランチは実行されず、パッケージは "ファイルが存在しない"ブランチのステップを実行せずに正常に完了します。パッケージは何をしているのですか?ファイルが存在しない場合、SSISスクリプトタスクは分岐しません。

  1. ヘッダーファイルが存在するかどうかを確認してください。そうならば、2
  2. ヘッダファイルを削除します
  3. なし、4
  4. プロセスに進みます。ヘッダファイル場合に進みます。詳細ファイルが存在するかどうかを参照してください。はいいいえ、
  5. プロセスの処理を停止した場合は、手順5に進み、詳細ファイル

パッケージ変数の詳細ファイルを削除します。

blnFileExists:ブール、偽

デフォルトを

strListIndexFileFullPath:string、ファイル名とファイルパスを設定する他の文字列変数に基づく式

スクリプトタスク

プロパティ:FailPackageOnFailure:偽、FailParentOnFailure:Falseの制約>評価操作 "ファイルが存在する" の

Imports System.IO 
Public Sub Main() 
    Dts.Variables("blnFileExists").Value = File.Exists(Dts.Variables("strListIndexFileFullPath").Value) 
    Dts.TaskResult = ScriptResults.Success 
End Sub 

プロパティ:式と制約、値:成功、式:@ blnFileExists = =論理、ANDを使用する

「ファイルは存在しません」という制約のプロパティ:評価演算:式と制約、値:成功、式:@ blnFileExists == False、論理ANDを使用

答えて

3

先制制約エディタでは、Logical AND論理ORに変更する必要があります。あなたのシナリオでは

、あなたはblnFileExists値がまたはあるときblnFileExists値が時には、パッケージパスをパスのいずれかをしたいです。 (Notice the OR in the sentence)制約をLogical ANDに設定すると、パッケージは両方の式が成功することを期待します。このシナリオでは、変数blnFileExistsまたはnot bothしか持てないため、このシナリオでは不可能です。

実際、Script Taskを使用してファイルが存在するかどうかを確認する必要はありません。あなたは同じことを行うためにFile System Taskを利用することができます。

File System Taskを使用してファイルが存在するかどうかを確認する方法については、下のリンクを参照してください。File System Taskを使用する場合は、C#コードを記述する必要はなく、優先順位制約に式を使用する必要もありません。

Branching after a file system task in SSIS without failing the package

お役に立てば幸いです。

+0

シヴァ - ありがとうございました。論理ORが答えでした。今あなたがそれを指摘したことは明らかです。他のソリューションを参照していただきありがとうございます - 私は実際にそれを見つけて使用しようとしましたが、私はまだあなたのソリューションを動作させることができなかった理由を説明するLogical ANDを使用していました。 – user1078196

関連する問題