1

約 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テーブルにインポートする方法を本当に探しているだけです-とにかく使用できません。

ありがとう

アンドリュー

4

1 に答える 1