2017-12-01 20 views
0

私はこれをひどく嘆いています。私は今日SSISを使い始めました。SSIS FOREACH:ファイル名が既に存在する場合、SQLテーブルからデータを削除してください。

フォルダ内のすべてのファイルをループするFOREACHを作成し、拡張子なしでファイル名とともにテーブルf_actualsを更新します。このファイル名はPeriodKeyとBusiness Unitの組み合わせです。それはうまくいく。

しかし、これは各ビジネスユニットの月間の毎日のアップロードであるためです(そのため、その期間を終えるまで毎月更新しています)ので、本当に必要なのはFOREACHですすでにf_actualsテーブル内のファイル名に対して、指定されたフォルダ内のインポートのため、ファイル名

  • がでf_actualsテーブルからすべてのマッチ
  • が続け削除

    • をチェック - :次の処理を行い、何かを含むようにFOREACH私はすでに構築しました

    これはおそらく非常に非効率的な方法です(毎日の増分アップロードが優先されます)。しかし、システムは何か他のものを簡単に提供できないため、ファイルは月ごとに更新する必要があります。

    希望はこれが理にかなっています。

    大変助かりました。

  • 答えて

    1

    For Eachループ内でExecute SQLタスクを使用してこれを行うことができます。

    あなたはSQLステートメントを使用することができ、次のいずれか

    DELETE 
    FROM f_actuals 
    WHERE filename = ? 
    

    それとも、ストアドプロシージャ(パラメータとして、あなたのファイル名を受け入れ、上記の文と同じことをやって)、例えば:

    EXEC DeleteFromActuals ? 
    

    ループ内の各ファイル名について、これを変数に格納し、SQL実行タスクのパラメータとして変数を渡します(これは?です)。

    [Execute SQL]タスクでパラメータをマップするには、[パラメータマッピング]に移動して新しいパラメータを追加します。ドロップダウンリストからファイル名を含む変数を選択し、データタイプをVARCHARに設定し、 'Parameter Name'を0に設定します。 'Direction'はデフォルトである 'Input'でなければなりません。

    +0

    多くのおかげでクリス、私は働くために私の復帰でこれを働かせようとします! – MotorBI

    +0

    同様の問題を抱えている読者にとって、最初のソリューションは完全に機能しました。データのアップロードに既存のファイル名パラメータを使用し、SQLの実行コマンドにマップして重複を削除しました。また、FOREACHにファイルシステムタスクを追加して、新しいファイルをアーカイブフォルダに移動し、重複ファイルを置き換えました。全体がファイルによってどのように名前が付けられているかに依存しているので、ファイルが正しくあることを確認するために、インポート前に別のテーブル(この場合はカレンダーディメンションテーブル)に対してファイル名を検証するために同様のアプローチを使用できると仮定しています名前がついた。 – MotorBI