0

まず、ssisプロジェクトがあり、Foreachファイル列挙子があり、その中には複数のタスクがあります。通常の状況では問題なく動作しますが、列挙子ディレクトリにファイルが存在しない場合、エラーが発生します。問題は、実行時にエラーがスローされないように、検証または何らかの方法で検証を行う方法です。ありがとう

imgリンク

ssishttp : //s15.postimage.org/l41py15aj/ssis.png エラー http://s15.postimage.org/rj0qupc0b/ssiserror.png

4

3 に答える 3

3

Foreach基本的にファイルとディレクトリをチェックするループの前にスクリプトタスクを実行できます。次に、ディレクトリまたはファイルのいずれかが存在しない場合にパッケージを停止する優先順位制約があります。

3つの変数を作成します

 Name        DataType   
 Directory   String
 Files       String
 Exists      int

スクリプトタスクでは、ディレクトリがファイルと一緒に存在するかどうかを確認するだけです。サブフォルダを列挙する必要がある場合、または特定のファイルがフォルダに存在するかどうかを確認する必要がある場合は、コードを変更できます。

if (Directory.Exists(Dts.Variables["User::Files"].Value.ToString()))
{
if (Directory.GetFiles(Dts.Variables["User::Files"].Value.ToString()).Length != 0)
    {
      Dts.Variables["User::Exists"].Value = 1;
     }
            else
            {
                Dts.Variables["User::Exists"].Value = 0;
            }
        }
        else 
        {
            Dts.Variables["User::Exists"].Value = 0;
        } 

優先順位制約で、変数の値を確認しますExists

    Evaluation operation : Expression
    Expression           : @Exists==1 

アップデート :

ReadOnlyVariableスクリプトタスクエディタで、スクリプトタグのセクションに変数を追加する必要があります

于 2012-12-04T09:00:13.610 に答える
0

ファイル名が有効かどうかをアサートするSQLタスクの無効化に式を設定します。

ここにはSSISがありませんが、調べてみます。

于 2012-12-04T07:02:02.477 に答える
0

エラーが発生したときにこの特定のケースを認識していて、それを処理したい場合。他の予期しないエラーで失敗した場合はどうなりますか?

常に「OnError」イベントハンドラーを追加します。

これで、イベントハンドラーを使用してエラー状態を処理した後、このエラーを伝播してタスクを失敗させるか(デフォルトの動作)、または「OnError」イベントハンドラーのシステム変数Propogateをfalseに設定できます。これにより、ForEachの後の残りのコード通常どおり続行できます。

于 2012-12-04T15:50:54.160 に答える