web-dev-qa-db-ja.com

ファイル名をExcel接続文字列に動的に割り当てる

SQL Server 2012でSSISを使用するのは初めてです。Excelファイルを正常に読み取り、その内容をSQL Server 2012のテーブルに読み込むことができます。タスクは、単純な直接読み取りExcelファイルであり、検証なしでSQLサーバーにコピーしますまたは今の変換。タスクは成功しました。しかし、パッケージに元のハードコードされたものではなく変数からファイル名を読み取らせようとすると、エラー「DTS_E_OLEDBERROR。An OLE DBエラーが発生しました。エラーコード: 0x80040E4D」

enter image description here

私がやったのは、Excel接続マネージャーのハードコードされた接続文字列を、式によって割り当てられた変数の値を取る式に置き換えるだけでした

enter image description here

データフロータスクが開始される前に、変数に値が割り当てられました。変数がチェックされ、正しい値が設定されました。

enter image description here

しかし、データフロータスクの開始時に以下のエラーが生成されました。

enter image description here

誰かが私が間違ったことを指摘し、問題を解決する方法をアドバイスしてくれれば非常にありがたいです。

20
user1205746

オプションA

Excel接続マネージャーのConnectionStringプロパティは、現在のファイルを操作する場所ではありません。これは、通常のフラットファイル接続マネージャーとは対照的です。

代わりに、Excel接続マネージャーのExcelFilePathプロパティに式を配置します。

enter image description here

理論的には、ConnectionStringとExcelFilePathに違いはないはずです。ただし、接続文字列を適切に取得するために構築する「もの」が増えることを除きます。

また、パッケージを32ビットモードで実行していることを確認してください。

オプションB

実行される可能性のある代替手段は、接続文字列の設計時の値が一度実行されると無効になることです。パッケージが開始されると、予想されるすべてのリソースが利用可能であることを確認し、利用可能でない場合は、中負荷で死ぬのではなく高速で失敗します。 SSISが実際にリソースにアクセスしなければならないときまでこの検証を遅らせることができ、DelayValidationプロパティをTrueに設定することでこれを行います。このプロパティはSSISのすべてに存在しますが、最初にExcel接続マネージャーで設定することから始めます。それでもパッケージ検証エラーがスローされる場合は、データフローの遅延検証もtrueに設定してみてください。

29
billinkc

すべての指示に従った後でも、これを機能させるのに時間がかかりました。そこで、Excelの名前を静的にして、ファイルをコピーして新しいファイルを作成する「ファイルシステムタスク」を追加しました必要な名前。

1
Mauro Torres

Expressionで以下のように接続文字列を定義できます。

Provider=Microsoft.ACE.OLEDB.12.0;

Data Source=" + @[User::InputFolder] + "\\"+ @[User::FileName] +";

Extended Properties=\"Excel 12.0 XML;HDR=YES\";
0
Ajeet Verma