1

Excel を使用してデータを収集および構成し、それを SQL Server 2012 にインポートして保存しています。

これまで SQL Server インポート & エクスポート ウィザードを使用してきましたが、常に手動で設定するのは面倒です。私は Express を使用しているので、もちろん、データを転送する実際のコマンドを保存したり、表示したりすることはできません。

SQL Server リンク サーバーおよび分散クエリで Excel を使用する方法に従って、リンク サーバーをセットアップしようとしましたが、次のエラーが発生します。

リンク サーバーは作成されましたが、接続テストに失敗しました。リンク サーバーを保持しますか?

Transact-SQL ステートメントまたはバッチの実行中に例外が発生しました。(Microsoft.SqlServer.ConnectionInfo)

リンク サーバー "FLTST" の OLE DB プロバイダー "Microsoft.Jet.OLEDB.4.0" のデータ ソース オブジェクトを初期化できません。
リンク サーバー "FLTST" の OLE DB プロバイダー "Microsoft.Jet.OLEDB.4.0" がメッセージ "不明なエラー" を返しました。(Microsoft SQL Server、エラー: 7303)

Webページは2005年のものなので、おそらくExcelのバージョン番号が問題だと思ったので、次のものを試しました:

  • ページに示されている Excel 8.0 (Excel 2002)
  • ウィザードが使用していると思われる Excel 12.0 (Excel 2007)
  • Excel 14.0 (Excel 2010) 実際に持っているもの

それらのすべてが私に同じ結果をもたらしました。

次に、 Import Excel file to SQL Server Expressに示されている分散クエリを試しました(ここでもプロバイダー文字列のさまざまなバリエーションを使用)。

USE ExTest

SELECT * INTO TstTbl FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 14.0;Database=c:\ExTest.xlsm', [Contacts])

go

次のエラーが表示されます。

リンク サーバー "(null)" の OLE DB プロバイダー "Microsoft.Jet.OLEDB.4.0" がメッセージ "不明なエラー" を返しました。
メッセージ 7303、レベル 16、状態 1、行 3
リンク サーバー "(null)" の OLE DB プロバイダー "Microsoft.Jet.OLEDB.4.0" のデータ ソース オブジェクトを初期化できません。

SQL Server に移動してデータを取り込む代わりに、Excel にとどまってデータをプッシュする必要がありますか?

私は何を間違っていますか?

PS: csv ファイルに変換するように言わないでください。私はより少ないステップを実行しようとしていますが、それ以上ではありません!

4

2 に答える 2

2

あなたの質問と同様の問題があり、これについていくつかの調査を行いました。私の問題はまだ完全には解決されていませんが、さらに一歩前進できると思います。質問は古いですが、助けが必要な人が他にいるかもしれません。

実行することにより:

SELECT * 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0 Xml;HDR=YES;Database=P:\Path\File.xlsx','SELECT * FROM [Sheet1$]');
GO

次のエラー メッセージが表示されます。

メッセージ 15281、レベル 16、状態 1、行 19 SQL Server は、コンポーネント 'Ad Hoc Distributed Queries' の STATEMENT 'OpenRowset/OpenDatasource' へのアクセスをブロックしました。このコンポーネントは、このサーバーのセキュリティ構成の一部としてオフになっているためです。システム管理者は、sp_configure を使用して、「アドホック分散クエリ」の使用を有効にすることができます。「アドホック分散クエリ」を有効にする方法の詳細については、SQL Server Books Online で「アドホック分散クエリ」を検索してください。

それを解決するには、次を実行します。

sp_configure 'show advanced options', 1  
RECONFIGURE  
GO  
sp_configure 'ad hoc distributed queries', 1  
RECONFIGURE  
GO 

しかし、新しいエラー メッセージが表示されます。

メッセージ 7302、レベル 16、状態 1、行 19 リンク サーバー "(null)" の OLE DB プロバイダー "Microsoft.ACE.OLEDB.12.0" のインスタンスを作成できません。

私が実行していることを修正するには:

EXEC sp_MSSet_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO

EXEC sp_MSSet_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
GO

しかし、代わりに次のエラーが表示されます。

メッセージ 7438、レベル 16、状態 1、行 19 32 ビット OLE DB プロバイダー "Microsoft.ACE.OLEDB.12.0" は、64 ビット SQL Server のインプロセスで読み込むことができません。

私の場合、IT 部門にサーバーに 64 ビット バージョンの Excel をインストールするよう依頼しました。これで、Excel からインポートする際の技術的な問題が解決することを願っています。

後でクリーンアップするために、有効にした設定を無効にします。

EXEC sp_MSSet_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 0
GO

EXEC sp_MSSet_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 0
GO

sp_configure 'ad hoc distributed queries', 0
RECONFIGURE  
GO

sp_configure 'show advanced options', 0  
RECONFIGURE  
GO  
于 2014-07-16T08:40:05.737 に答える
0
  1. Excel データ ソース接続マネージャーを使用して SSIS パッケージを作成します。宛先は SQL Express、OLE DB 宛先です。
  2. Excel 接続マネージャーを作成すると、既存の Excel ファイルを 1 つだけ使用できます。
  3. user::sourceFile のような 1 つのユーザー変数を定義します。これは、Excel ファイルのフル パスを入力するために使用されます。
  4. Excel接続マネージャーが作成されたら、右クリック->設定->「式」を見つけ、[User::sourceFile]を式に与えるだけです
  5. ソースから宛先への単純なデータ フローを 1 つ作成するだけです
  6. SSIS パッケージを保存してデバッグし、すべての資格情報が機能し、データが宛先テーブルに流れ込むことができることを確認します。注: 機密データをマシン キーで暗号化してパッケージに保存しないでください。
  7. 新しいファイルをロードする必要があるたびに、DTEXEC を使用してパッケージを実行し、パラメーターをオーバーライドします。

幸運を

于 2013-03-15T06:09:05.573 に答える