Re: 7303 エラー
SQL Server の分散クエリ、XLS からのデータ
したがって、主なエラーはおそらくこれです。
OLE DB provider "MICROSOFT.JET.OLEDB.4.0" for linked server "(null)" returned message "Unspecified error".
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "MICROSOFT.JET.OLEDB.4.0" for linked server "(null)".
いくつかの権限を確認します。
Temp フォルダーのアクセス許可を確認する
これは、プロバイダーがデータの取得中に一時フォルダーを使用するために必要です。フォルダーは、ローカル システム アカウントまたはネットワーク ドメイン アカウントのどちらを使用するかに基づいて、次のいずれかになります。
ネットワーク アカウントの場合、フォルダは
\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp
ローカル システム アカウントの場合、その \Windows\ServiceProfiles\LocalService\AppData\Local\Temp
このフォルダーを右クリックし、コードを実行するアカウント (またはグループ) に読み取り/書き込みアクセスを許可します。それは私のためにエラーを解決しました。
また
http://blogs.msdn.com/b/spike/archive/2008/07/23/ole-db-provider-microsoft-jet-oledb-4-0-for-linked-server-null-returned-message- unspecified-error.aspx
これは、SQL Server サービスが、サービスを開始したログイン (この場合は管理者/管理者ログイン) の一時 DSN を一時フォルダーに書き込もうとするためです。temp フォルダーは次のようなものです: C:\Documents and Settings\Admin\Local Settings\Temp
.15 前述のように、OleDbProvider は、それを初期化したユーザー (この場合はユーザー/ユーザー) のコンテキストで常に実行されます。.16 ユーザー/ユーザーには、このフォルダー ( C:\Documents and Settings\Admin\Local Settings\Temp ) に対する権限がありません。SQLの実行時に FileMon を実行すると、次のことがわかります。
sqlservr.exe:000 クエリ情報 C:\DOCUME~1\Admini~1\LOCALS~1\Temp アクセスが拒否されました 属性: エラー
ここまでを要約すると、SQL Server サービスは Admin/Admin として開始され、選択が行われると、OleDb プロバイダーが User/User によって呼び出されます。ここで、OleDb プロバイダーは一時ディレクトリに一時 DSN を作成しようとします。これは SQL Server サービス (管理者/管理者) の一時ディレクトリになりますが、ユーザー (この場合はユーザー/ユーザー) はこのフォルダーに対する書き込み権限を持っていません。そして、エラーが発生します。
これを解決するには 2 つの方法があります。
オプション 1 : マシンからログアウトし、SQL Server サービスを開始するアカウント (この場合は Admin/Admin) としてログインし、コマンド プロンプトを開始して「set t」(引用符なし) と入力すると、次のように表示されます。
TEMP=C:\DOCUME~1\Admin\LOCALS~1\Temp TMP=C:\DOCUME~1\Admin\LOCALS~1\Temp
これらは %TEMP% および %TMP% に設定された環境変数なので、そのフォルダーに移動し、右クリックして [プロパティ] -> [セキュリティ] を選択し、ユーザー (この場合はユーザー/ユーザー) を追加します。ユーザーのデフォルトはRead&Execute/List Folder Content/Read、これでは不十分です。Write も選択する必要があります。
ログアウトし、User/User として再度ログインして、SSMS からコマンドを再実行します。今回はうまくいくはずです。
オプション 2 : 管理者としてログオンし、TEMP および TMP 変数をたとえば C:\Temp に変更します。これにより、基本的に、Temp ディレクトリが Documents and Settings フォルダから移動されます。ただし、これを有効にするには、SQL サーバーを再起動する必要があります。
したがって、基本的には、SQL Server の起動時にスタートアップ アカウント (Admin/Admin) の Temp フォルダーが使用されますが、MICROSOFT.JET.OLEDB.4.0 は常に SQL コマンドを呼び出すユーザー (User/User) として実行されます。 )、このユーザーがその一時フォルダーへの書き込みアクセス権を持っていない限り、これは失敗します。
そこにあるすべてのセットアップを知らなくても、おそらくオプション 2 が推奨されるソリューションです。オプション 1 では、プロバイダーを呼び出すすべてのユーザーを追加する必要があるため、実用的ではない可能性があります。また、SQL Server サービスのスタートアップ アカウントを変更すると、そのアカウントの TEMP ディレクトリが使用され、この TEMP フォルダのすべてのユーザーに書き込み権限を与えるまで、エラーが再び表示されます...またはユーザーグループ (推奨)。