最後に、SQL ServerがAccessデータベースと「通信」するのに何度か失敗した後、SSMSの「リンクサーバー」として、またはOPENROWSET()
を介して T-SQLで–次の3つの提案を提供するこのブログ投稿を見つけました。
微調整#1:OLEDBプロバイダーの設定
ACE(またはJet)用のOLE DBプロバイダーでは、[動的パラメーター]および[処理中の許可]オプションを有効にする必要があります。 SSMSで、
を開きますサーバーオブジェクト>リンクサーバー>プロバイダー
ブランチで、[Microsoft.ACE.OLEDB.12.0](または[Microsoft.Jet.OLEDB.4.0])を右クリックし、[プロパティ]を選択して、これらのオプションが選択されていることを確認します。
微調整#2:一時フォルダの権限
これは私を困惑させていたものです。
どうやらSQLServerは、Accessデータベースに対してOLE DBクエリを実行しているときに、一時ファイルに情報を書き込む必要があるようです。 SQL Serverはサービスとして実行されているため、サービスが実行されているアカウントの%TEMP%フォルダーを使用します。
SQL Serverサービスが組み込みの「ネットワークサービス」アカウントで実行されている場合、一時フォルダーは
%SystemRoot%\ ServiceProfiles \ NetworkService \ AppData \ Local \ Temp
組み込みの「ローカルサービス」アカウントで実行されている場合、一時フォルダは
%SystemRoot%\ ServiceProfiles \ LocalService \ AppData \ Local \ Temp
私の問題は、SSMSが myで実行されていたことです。 アカウント(ネットワークサービスではない)なので、Tempフォルダーへの読み取りアクセス権しかありませんでした
そのフォルダに対する変更権限を自分に付与したら
ここで別の質問、つまり...
に記載されているように、OPENROWSETクエリを有効にしました。EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO
...クエリは正常に機能しました:
微調整#3:memory_to_reserve
私の場合は使用する必要はありませんでしたが、前述のブログでは、SQLServerサービスの「-gmemory_to_reserve」スタートアップパラメーターを調整することで、同様のエラーを回避できると主張しています。そのためには:
- SQLServer構成マネージャーを起動します
- SQL Serverサービスを右クリックして([SQL Serverサービス]タブ)、[プロパティ]を選択します
- [詳細設定]タブで、
-g512;
を先頭に追加します 「スタートアップパラメータ」設定へ - SQLServerサービスを再起動します
「memory_to_reserve」設定の詳細については、MSDNの記事を参照してください。