SQL Server 2012でSSISを使用するのは初めてです。Excelファイルを正常に読み取り、その内容をSQL Server 2012のテーブルに読み込むことができます。タスクは、単純な直接読み取りExcelファイルであり、検証なしでSQLサーバーにコピーしますまたは今の変換。タスクは成功しました。しかし、パッケージに元のハードコードされたものではなく変数からファイル名を読み取らせようとすると、エラー「DTS_E_OLEDBERROR。An OLE DBエラーが発生しました。エラーコード: 0x80040E4D」
私がやったのは、Excel接続マネージャーのハードコードされた接続文字列を、式によって割り当てられた変数の値を取る式に置き換えるだけでした
データフロータスクが開始される前に、変数に値が割り当てられました。変数がチェックされ、正しい値が設定されました。
しかし、データフロータスクの開始時に以下のエラーが生成されました。
誰かが私が間違ったことを指摘し、問題を解決する方法をアドバイスしてくれれば非常にありがたいです。
Excel接続マネージャーのConnectionString
プロパティは、現在のファイルを操作する場所ではありません。これは、通常のフラットファイル接続マネージャーとは対照的です。
代わりに、Excel接続マネージャーのExcelFilePath
プロパティに式を配置します。
理論的には、ConnectionStringとExcelFilePathに違いはないはずです。ただし、接続文字列を適切に取得するために構築する「もの」が増えることを除きます。
また、パッケージを32ビットモードで実行していることを確認してください。
実行される可能性のある代替手段は、接続文字列の設計時の値が一度実行されると無効になることです。パッケージが開始されると、予想されるすべてのリソースが利用可能であることを確認し、利用可能でない場合は、中負荷で死ぬのではなく高速で失敗します。 SSISが実際にリソースにアクセスしなければならないときまでこの検証を遅らせることができ、DelayValidation
プロパティをTrueに設定することでこれを行います。このプロパティはSSISのすべてに存在しますが、最初にExcel接続マネージャーで設定することから始めます。それでもパッケージ検証エラーがスローされる場合は、データフローの遅延検証もtrueに設定してみてください。
すべての指示に従った後でも、これを機能させるのに時間がかかりました。そこで、Excelの名前を静的にして、ファイルをコピーして新しいファイルを作成する「ファイルシステムタスク」を追加しました必要な名前。
Expressionで以下のように接続文字列を定義できます。
Provider=Microsoft.ACE.OLEDB.12.0;
Data Source=" + @[User::InputFolder] + "\\"+ @[User::FileName] +";
Extended Properties=\"Excel 12.0 XML;HDR=YES\";