サーバーで実行される毎月実行されるSQL Serverジョブがあります。ジョブはSSISパッケージを使用しており、データベースからデータを抽出し、Excelシートを作成してデータをExcel 2003にコピーすることになっています。
Excel 2003の切り捨ての問題により、実際にはデータベースから約140,000行を取得しました(Excelは64,000行をサポートしています)。そのため、2007 Excel形式をサポートするように構成ファイルを変更しました。
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + @[User::FullPath] + ";Extended Properties=\"Excel 12.0;HDR=YES\"
しかし、ジョブを実行しようとすると、エラーメッセージが表示されて失敗します。
「要求されたOLE DBプロバイダーMicrosoft.ACE.OLEDB.12.0は登録されていません」
要約:INSTALL32ビットバージョンMicrosoft Access Database Engine 2010 Redistributableアンインストール64ビットバージョン(インストール済みの場合)。 http://www.Microsoft.com/en-us/download/details.aspx?id=13255
Excel接続マネージャーは、バージョンが2007(xlsx)より上である場合、ExcelファイルにアクセスするためにACE OLE DBプロバイダーを使用しようとしています。ボックスは64ビットですが、32ビットアプリケーションであるSQL Server Data Toolsを使用しています。 SSDTには64ビットバージョンはありません。 SSDT内でパッケージを設計するとき、32ビットプロバイダーのみを使用できる32ビットプロセスを使用しています。 Excelファイルでテーブルを選択しようとすると、接続マネージャーは32ビットバージョンのACE OLE DBプロバイダーにアクセスする必要がありますが、このプロバイダーはマシンに登録されておらず、64ビットバージョンがインストールされています。
32-bitバージョンの「Microsoft Access Database Engine 2010 Redistributable」をダウンロードする必要があります。インストールしようとすると、エラーメッセージが表示される場合があります。最初に、おそらく以前にインストールした「Microsoft Access Database Engine 2010 Redistributable」の64ビットバージョンのみをアンインストールする必要があります。 64ビットバージョンと32ビットバージョンを同じホストに共存させることはできないため、それらを切り替える場合は(「プログラムと機能」を使用して)アンインストールしてインストールする必要があります。
64ビットバージョンのアンインストールとプロバイダーの32ビットバージョンのインストールが完了すると、問題は解決し、Excelファイル内のテーブルを最終的に選択できます。 Excel接続マネージャーは、Excelファイルにアクセスするために、ACE OLE DBプロバイダー(32ビットバージョン)を使用できるようになりました。
別の方法があります。 Microsoft Office ExcelでExcelファイルを開き、「Excel 97-2003ワークブック」として保存します。次に、ファイル接続で新しく保存されたExcelファイルを使用します。
別のオプションは、32ビットモードでパッケージを実行することです。ソリューションをクリックします=>プロパティ=?デバッグ=> 64ビットでの実行をfalseに設定します。
上記のように「Microsoft Access Database Engine 2010 Redistributable」をインストールしましたが、バージョンの問題と思われる場合、ビットトラックの問題を横から追跡しました。
「2007 Office System Driver:Data Connectivity Components」をインストールすると、分類されます。
https://www.Microsoft.com/en-us/download/details.aspx?id=23734
OLEDBドライバーをインストールするだけで逃げられると思います- http://www.Microsoft.com/en-us/download/details.aspx?id=13255
私にとって最も簡単な解決策は、SQLエージェントジョブを32ビットランタイムで実行するように変更することでした。 [SQLジョブ]> [プロパティ]を右クリック>ステップ>編集(ステップ)> [実行オプション]タブ> 32ビットランタイムを使用
64ビットAccessデータベースエンジンをダウンロードした後、指示に従って/ passiveスイッチ here を使用しました。 SQL Server 2012でOffice 32ビットSSASテーブルモデルを実行しています。64ビットAccessデータベースエンジンをダウンロードして実行すると、Office 2010を最初にアンインストールしないとインストールできないというメッセージが表示されましたが、/passiveスイッチはこれを解決したようです(表形式モデルでExcelブックとAccessテーブルをインポートできるようになりました)。
ジョブが64ビットで実行されている場合は、おそらく32ビットドライバーをインストールしています。詳細: http://Microsoft-ssis.blogspot.com/2014/02/connecting-to-Excel-xlsx-in-ssis.html
以前に同様の操作を完了できた後、この同じエラーが発生していました。私は以前にそれらを持っていなかったし、物事が働いていたので、言及したパッケージのいずれもダウンロードしようとしませんでした。私の仕事のITは、Microsoft Office 2013で「修復」を行いました([コントロールパネル]> [プログラム]> [追加と削除]-[変更]を選択し、[修復])。数分で完了しましたが、すべてが修正されました。
私が見つけた最も簡単な解決策は、接続マネージャーのセットアップでExcelバージョン97-2003を指定することでした。
パッシブモードでADBEの32ビットバージョンをインストールするだけです。
管理者モードでcmdを実行し、次のコードを実行します。
AccessDatabaseEngine.exe/passive
http://www.Microsoft.com/en-us/download/details.aspx?id=13255