約 301808 行と 2 列の Excel 2007 ファイルがあります。SSIS を使用してインポートしようとしましたが、2007 Excel を使用できません。次に、次の手順に従って、SQL Server でリンク サーバーを作成することにしました。
- SQL Server Management Studio で、オブジェクト エクスプローラーの [サーバー オブジェクト] を展開します。
- [リンク サーバー] を右クリックし、[新しいリンク サーバー] をクリックします。
- 左側のウィンドウで [全般] ページを選択し、次の手順に従います。
- 最初のテキスト ボックスに、リンク サーバーの任意の名前を入力します。
- [その他のデータ ソース] オプションを選択します。
- [プロバイダー] リストで、[Microsoft Jet 4.0 OLE DB プロバイダー] をクリックします。
- [製品名] ボックスに、OLE DB データ ソースの名前として「Excel」と入力します。
- [データ ソース] ボックスに、Excel ファイルの完全なパスとファイル名を入力します。
- [プロバイダー文字列] ボックスに、Excel 2002、Excel 2000、または Excel 97 - ブックの場合は Excel 8.0 と入力します。
- [OK] をクリックして、新しいリンク サーバーを作成します。
ここから: http://support.microsoft.com/kb/306397/EN-US
ただし、手順は 2007 ではなく以前の Excel ファイルのみを対象としているため、2007 の接続文字列を調べ、リンク サーバーの設定で Excel 8.0 の代わりに Excel 12.0 を使用しました。
- プロバイダー: Microsoft Office 12.0 Access データベース エンジン OLE DB
- プロバイダー製品名: Excel データ ソース: C:\Documents and
- Settings\UserName\Desktop\Main\FilesIns\MyExcelFile.xlsx プロバイダ
- 文字列: Excel 12.0
- 位置:
- カタログ:
次に、このエラーが発生しました:
リンク サーバー "EXCEL_MY_FILE" の OLE DB プロバイダー "Microsoft.ACE.OLEDB.12.0" には、テーブル "Report 1$" が含まれていません。テーブルが存在しないか、現在のユーザーがそのテーブルに対する権限を持っていません。
パーミッションの問題が発生した場合に備えて、セキュリティにアクセスし、 nt authority\system を追加しましたが、それでも上記のエラーが発生しました。
Excel テーブルは「レポート 1」と呼ばれます。
また、sql で openrowset を使用して何が起こったのかを確認したところ、次のようになりました。
SQL Server は、コンポーネント 'Ad Hoc Distributed Queries' の STATEMENT 'OpenRowset/OpenDatasource' へのアクセスをブロックしました。このコンポーネントは、このサーバーのセキュリティ構成の一部としてオフになっているためです。
次に、以下のリンクのコードを試して、openrowset の使用に役立つかどうかを確認しました。
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO
そして得た:
リンク サーバー "(null)" の OLE DB プロバイダー "Microsoft.ACE.OLEDB.12.0" から、"FROM 句の構文エラー" というメッセージが返されました。メッセージ 7321、レベル 16、状態 2、行 1 OLE DB プロバイダー「Microsoft.リンク サーバー "(null)" の ACE.OLEDB.12.0"。
したがって、openrowset ステートメントの値が正しいかどうかはわかりません。
SSISを使用せずにこのファイルをSQLテーブルにインポートする方法を本当に探しているだけです-とにかく使用できません。
ありがとう
アンドリュー