フォルダのディレクトリからすべてのファイル名を取得する際に、その行数を取得しようとしています。 (可能であれば、ファイルサイズもバイト単位で)Microsoft Visual Studio 2010 Shellを使用しています。ここで私はこれまで何をやったかです:SSISでフラットファイル名を取得し、異なる列の複数のフラットファイルから行数をどのように取得しますか?
私はForeachループコンテナを作成して、私はループにオーバーするフォルダへの変数にのforeachファイル列挙子と式に列挙子を設定します。私は*.*
とファイルセクションを残し、Name Only
を取得するように頼まれました。変数マッピングをFullFilePath
という新しい変数に変更しました。コンテナはPackage
、値のタイプはString
、値は空です。
次に、データフローをループに追加しました。フラットファイルソース、行数、およびOLE DB宛先を追加しました。フラットファイルのソースプロパティ式をForeachループコンテナ式の同じフォルダ変数に変更しました。私は行番号機能(Int32、値0)にRecordCount
変数を追加しました。 OLE DB Destinationは、OLE DB Destinationという名前の新しいテーブルを作成します。
次のステップは、実行するSQLタスクで、Insert Into DBO.FileData (FileName,RowCount) Values (?,?)
です。 2つのパラメータマッピングを設定しました.1)Foreachループコンテナの変数名、FullFilePathおよびデータ型VarChar、2)Row Count、RecordCount、Data Type Longの変数。
私は次に別を持っていますデータフロータスクによって作成されたテーブルを削除するSQL実行タスクを実行します。問題は、これらすべてのステップでパッケージがまだ完了しないということです。それは実際にハングアップし、実行前に失敗します。それは言う:
Warning: Access is denied. Error: Cannot open the datafile 'FullFilePath' Error: Flat File Source failed the pre-execute phase and returned error code 0xC020200E.
何か私は間違っている可能性がありますか?写真が役立つかどうか教えてください。
最初に、フルパスとファイル名をフラットファイルソースに渡す必要があります。フラットファイルソースには、フォルダに渡すだけでは通過できません。次に、フラットファイルソースに現在設定されているフォルダパスにforeachループによって生成されたファイル名を付ける必要があります。これはフラットファイルソース上の式(接続文字列)によって設定されます。それらのすべては、そのデータフローと概念を使用して読んでいる各ファイルのメタデータを変更する必要があります。スクリプトのタスクでそれをやって、オブジェクト変数を返すほうがはるかに良いでしょう。 – SFrejofsky
@SFrejofsky私はそれを理解しました。あなたに感謝します。 –