50以上のExcelファイルを介してExcelループを実行しています。ループは各Excelファイルを通過し、すべてのデータを取得して、エラーなしでデータベースに入力します。EFile
これは、遅延検証をtrueに設定し、Excel接続の式が(ループ内で)何も設定されていないという文字列変数であることを確認する一般的なプロセスです。
動作していないもの:Excelファイルの名前をデータベースに入力しようとしています。
何が試されましたか(編集; SOは私の2を1に変更しました-理由はわかりません):
Excelファイルとデータベース入力の間に派生列を追加し、EFile式を使用して列を追加します(したがって、派生列の式の下では@ [User :: EFile]になります)。空を追加します。ただし、これは空白を何も入力しません(何も入力しません)。
1つの提案は、別の文字列変数を追加し、そのプロパティEvaluateAsExpressionをTrueに設定し、式をEFile変数(@ [User :: EFile])に設定することでした。面白いのは、これが同じことをすることです-データベースに空白を入力します。
ブログの多くの人がこれができると主張していますが、実際にこれに対処している人は見たことがありません(私はブログを持っており、答えが得られたら間違いなくこれを行う方法を人々に示します。これまでのところ、これらの他の人は落ちています短い)。ループ中にExcelファイルの名前を取得してデータベースに入力するにはどうすればよいですか?
追加:追加するのを忘れました。スクリプトはありません。主張はそれらなしでそれができるということです、それで私はそれらなしで解決策を見たいです。
注:Excelファイルからデータをインポートする機能はすでにあります-それは簡単です(あらゆる種類のtxt、csv、xls、xlsxデータをインポートするための2つの異なるプロジェクトがあるため、GitHubアカウントを参照してください)。データベースにもインポートされているファイルの実際の名前も取得しようとしています。したがって、各ファイルのデータとともに50個のExcelファイルがある場合、データベースにはそのデータと一緒に50個のファイル名があります(したがって、各ファイルに1000行のデータがある場合、各1000行にもファイルの名前があります。それらは追加の列としてそれらの隣から来ました)。この点は、私がファイルにデータをインポートするのに問題があると人々が思っているので、多くの混乱を引き起こしているようです-いいえ、私のGitHubを参照してください。繰り返しますが、それは簡単です。インポートする必要があるのはFILENAMEです。
テストパッケージ:https ://github.com/tmmtsmith/SSISLoopWithFileName
解決:@jaimetは、派生列は@ [User :: CurrentFile]である必要があることを指摘しました(テストパッケージを参照)。パッケージを最初に実行したとき、データベースに空白の値が残っていました。ただし、最初に接続を設定するときは、実際のファイルをポイントし(これを「パッケージのだまし」と呼びます)、後で接続の式を空白の@ [User::CurrentFile]に変更します。変数@[User:: CurrentFile]を使用した派生列は、0の文字列を示しました。そこで、派生列を削除し、完全なファイルパスと名前を変数に入れてから、変数を派生列に追加しました(文字列の長さが91文字であると思わせた後、戻って変数を何も設定しませんでした(英語の先生は今のところTHENを嫌うでしょう)。パッケージを実行すると、ファイルのフルパスが入力されました。多分、
すべての助けに感謝します。