-1
  • スケジュールされた時間に毎日データベースにアップロードする必要があるフォルダーに 10 個のフラット ファイル (.dat 形式) があります。
  • すべてのファイル関連情報は、ファイル名、ファイル パス、テーブル名、列名、区切り記号などのデータベースに存在します。
  • 各ファイルが存在するかどうかを確認する必要があります。存在しない場合は、「ファイルが見つかりません」というエントリをログに記録する必要があります。
  • ファイルが存在する場合は、トレーラ レコードを確認する必要があります (ファイル内の最後のレコードで、Count=00001000、その特定のファイル内のレコード数のカウントである必要があります)。
  • トレーラー レコードが存在しない場合は、「トレーラー レコードが見つかりません」というエントリをログに記録する必要があります。ログエントリに一致しない必要があります、「カウントの不一致」。
  • すべての条件が満たされている場合、各ファイルのデータをデータベースにロードする必要があります。

上記のシナリオを実装するためのアイデアを提案してください。ありがとう!!!

4

1 に答える 1

1

次の解決策は、問題の解決に役立つ場合があります。

で For each ループ コンテナーを使用し"Item" enumeratorます。10 個のファイルがあり、レイズが必要な何かが不足している場合は、これを使用する必要があります。ファイル列挙子はファイルを反復処理するだけで、エラーは発生しません。

以下は手順です。

変数を使用して次の SSIS パッケージを作成します。

  1. ファイルフルパス
  2. 検証済み

各ループ列挙子は、次のスクリーンショットのように構成する必要があります。

コレクションの構成: ここに画像の説明を入力

変数セクションの設定 ここに画像の説明を入力

コンテナー内にはスクリプト タスクがあります。FileFullPath次の画面のように、読み取り専用変数とIsValidate読み取りおよび書き込みとして言及する必要があります。

ここに画像の説明を入力

[スクリプトの編集] をクリックし、次のコードを挿入します。

public void Main()
{
        Dts.Variables["IsValidated"].Value = true;

        string fileFullPath = Dts.Variables["FileFullPath"].Value.ToString();

            if (!File.Exists(fileFullPath))
            {
                    var msg = String.Format("File is not available in location : {0}", fileFullPath);
                    Dts.Events.FireError(0, "Dat file loading", msg, string.Empty, 0);
                    Dts.TaskResult = (int)ScriptResults.Failure;
            }

            //Read last line
            String lstLine = File.ReadLines(fileFullPath).Last();

            int totalCount = 0;
            bool talierExists = int.TryParse(lstLine, out totalCount);

            if (!talierExists)
            {
                    var msg = String.Format("No tailer row found and last line is : {0}", lstLine);
                    Dts.Events.FireError(0, "Dat file loading", msg, string.Empty, 0);
                    Dts.TaskResult = (int)ScriptResults.Failure;
            }

            //Total count
            int fullCount = File.ReadLines(fileFullPath).Count();

            if (fullCount != totalCount)
            {
                    var msg = String.Format("No of count is not matching, tailer count = {0} and full count={1}");
                    Dts.Events.FireError(0, "Dat file loading", msg, string.Empty, 0);
                    Dts.TaskResult = (int)ScriptResults.Failure;
            }

            Dts.Variables["IsValidated"].Value = true;

            Dts.TaskResult = (int)ScriptResults.Success;
}

その後、データフローがあります。スクリプト タスクをデータ フローに接続し、コネクタを右クリックして、次のように編集および構成に移動します。

ここに画像の説明を入力

SSIS パッケージは次のようになります。

ここに画像の説明を入力

お役に立てれば!

于 2013-07-11T06:43:11.280 に答える