次の文を実行しようとしていますが、すぐ下にエラーメッセージが表示されます。私は終わりのない答えを研究しましたが、私のために働いた人はいません。 Office 365(64ビット)を実行しています。 Microsoft Accessデータベースエンジン(64ビット)をロードしました。これは、SQL Server 2012と同様にSSDTを使用したVisual Studio 2013にあります。SQLServerの環境または起動パラメーターの変更にアクセスできません。どんな助けも大歓迎です。
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.15.0',
'Excel 12.0;Database=C:\Users\UserName\Folder\SomeFile.xlsx;;HDR=NO;IMEX=1', [Table 1$])
私が試したことは次のとおりです。
まず、私は走った...
sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO
続いて...愛なしで。
EXEC sys.sp_addsrvrolemember @loginame = N'<<Domain\User>>', @rolename = N'sysadmin';
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.15.0', N'AllowInProcess', 1
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.15.0', N'DynamicParameters', 1
GO
Microsoft.ACE.OLEDB.12.を読み取るようにコードを変更しました。これも見たとおり、まだ愛はありません。
また、システム:MSSQLSERVER、および管理者、ネットワークサービス(オン後者)。
まだ愛はありません。
最後に、32ビットバージョンのMicrosoft Accessデータベースエンジンへの変更を試みましたが、これは機能しませんでした。
誰か助けて?
これにより問題が解決します。何らかの理由で、SQL ServerはデフォルトのMSSQLSERVERアカウントを好みません。ローカルユーザーアカウントに切り替えると、問題が解決します。
ユーザーを変更する代わりに、このアドバイスを見つけました:
これは、他の誰かを助けるかもしれません-SQL 64でこのエラーを試みて修正するためのあらゆる解決策を試した後。
リンクサーバー "(null)"のOLE DBプロバイダー "Microsoft.ACE.OLEDB.12.0"のデータソースオブジェクトを初期化できません。
..ここで記事を見つけました...
http://sqlserverpedia.com/blog/sql-server-bloggers/too-many-bits/
..これは、このフォルダに対するすべての権限を全員に与えることを提案しました.
C:\ Users\SQLサービスアカウント名\ AppData\Local\Temp
そしてちょっとプレスト!私の質問が突然始まりました。私は大喜びで空気を打ちました。
エドワルド
これは、参照用です。プロバイダーと接続しようとしたときにさまざまなSQLエラーメッセージが表示されたためです。他の答えは、「これを試して、これ、そしてこれを試して」と規定しています。私は他の答えに感謝しますが、私は特定の問題を伴う特定の解決策
エラー
...プロバイダは情報を提供しませんでした...データソースオブジェクトを初期化できません...
エラー番号
7399、7303
エラーの詳細
Msg 7399, Level 16, State 1, Line 2 The OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" reported an error.
The provider did not give any information about the error.
Msg 7303, Level 16, State 1, Line 2 Cannot initialize the data source object
of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".
ソリューション
ファイルが開いていました。閉じて.
クレジット
エラー
アクセスが拒否されました...列情報を取得できません...
エラー番号
7399、7350
エラーの詳細
Msg 7399, Level 16, State 1, Line 2 The OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" reported an error.
Access denied.
Msg 7350, Level 16, State 2, Line 2 Cannot get the column information
from OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".
ソリューション
アクセスを許可
クレジット
エラー
1つ以上の必須パラメーターに値が指定されていません。..クエリを実行できません...
エラー番号
???、7320
エラーの詳細
OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "No value given for one or more required parameters.".
Msg 7320, Level 16, State 2, Line 2
Cannot execute the query "select [Col A], [Col A] FROM $Sheet" against OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".
ソリューション
列名が間違っている可能性があります。 [Col A]
と[Col B]
は実際にスプレッドシートに存在しますか?
エラー
"未指定エラー" ...データソースオブジェクトを初期化できません...
エラー番号
???、7303
エラーの詳細
OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "Unspecified error".
Msg 7303, Level 16, State 1, Line 2 Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".
ソリューション
管理者としてSSMSを実行します。 この質問。 をご覧ください。
その他の参考文献
プロパティの変更を提案するその他の回答。これらの2つのプロパティの変更(チェックまたはチェック解除)がどのように役立つかわかりません。
Excelファイルが開いていないことを確認してください。
具体的には、次のとおりですクエリ対象のExcelファイルが開いていなかった場合のみおよび私としてSQL Serverサービスを実行している場合 [ファイルにアクセスできるユーザーとしてシステム]。私の答えの一部はすでに他の場所で与えられているので、冗長性をおpoびしますが、より簡潔な答えのために:
USE [master]
GO
EXEC sp_configure 'Show Advanced Options', 1
RECONFIGURE
GO
EXEC sp_configure 'Ad Hoc Distributed Queries', 1
RECONFIGURE
GO
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
SELECT *
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=C:\MyExcelFile.xlsx',
'SELECT * FROM [MyExcelSheetName$]')
SQL Serverで、次の手順を試してください。
Server Object
をクリックします。Linked Servers
をクリックします。Providers
をクリックします。Microsoft.ACE.OLEDB.12.0
を右クリックし、Properties
をクリックします。私はWindows 10でSQL Server 2014 64 bit
を実行しています
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 0
AllowInProcessがオフになった理由がわからないのですが、それが私の場合のキーでした。リンクサーバーですべてのオプションをオフにすることを提案していただきありがとうございます。
SQL Server Management Studioを閉じます。 runコマンドにServices.mscと入力して、サービスウィンドウを開きます。
SQL Serverサービスを検索して右クリックし、プロパティを選択します。
[ログオン]タブで、システムアカウントを選択するか、ドメインIDとアカウントとパスワードを選択します。
ログイン名が見つかったら、[OK]を押します。
次に、両方のフィールドにログインのパスワードを入力します。
次の図に示すように、新しい変更が適用されるようにサービスを再起動します。
次に、SQL Server Management Studioを起動し、まだ動作しない場合はクエリを実行してみてください。システムを再起動してください。
...または次のクエリを実行します。
USE [master]
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
GO
この場合、SQL Serverサービスのパラメーターを追加するのに役立ちました。
Services.msc
に移動し、SQL Serverサービスを選択して[プロパティ]を開きます。Startup Parameters
を選択し、新しいパラメーター–g512
を追加しますExec sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
Exec sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , 1;
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'DynamicParameters' , 1;
GO
Insert into OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0','Data Source=C:\upload_test.xlsx;Extended Properties=Excel 12.0')...[Sheet1$]
SELECT ColumnNames FROM Your_table -- Sheet Should be already Present along with headers
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , 0;
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'DynamicParameters' , 0;
GO
Exec sp_configure 'Ad Hoc Distributed Queries', 0;
RECONFIGURE;
GO
Exec sp_configure 'show advanced options', 0
RECONFIGURE;
GO
これは私のエラーコードです:
OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "The Microsoft Access database engine could not find the object 'ByStore$'. Make sure the object exists and that you spell its name and the path name correctly. If 'ByStore$' is not a local object, check your network connection or contact the server administrator.".
Msg 7350, Level 16, State 2, Procedure PeopleCounter_daily, Line 26
Cannot get the column information from OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".
私の問題は、Excelファイルがパスにないことでした。正しいシートでファイルを置くだけでいいでしょう。
私にとって、これらの2つのことはさまざまな場面で役立ちました。
1)MS Accessランタイムをインストールしたばかりの場合は、サーバーを再起動します。データベースインスタンスをバウンスするだけでは不十分です。
2)Excelファイルが開いていないことを確認するだけでなく、プレビューウィンドウをオンにしてWindowsエクスプローラーを開いていないことを確認します。
私の場合、computerNameを使用して共有フォルダーからファイルにアクセスしていたため、この問題が発生していました。 OPENROWSET( '' Microsoft.Jet.OLEDB.4.0 ''、 '' Excel 8.0; Database = '\ ntpc0100\MysharedFolder\KPI_tempData\VariablePayoutDetails.xls'; IMEX = 1; ''、 '.....)Insted of computerName ntpc0100(お使いのマシン名)を使用マシンのIPアドレスを指定する必要があります。例:-OPENROWSET( '' Microsoft.Jet.OLEDB.4.0 ''、 '' Excel 8.0; Database = '\ 193.34.23.200\MysharedFolder\KPI_tempData\KPIVariablePayoutDetails.xls' ....);
まったく同じエラーメッセージが表示され、このスレッドで提案された解決策を試しましたが、成功しませんでした。
問題を解決したのは、.xlsxファイルを開いて.xls(Excel 2003)ファイルとして保存することです。
ファイルが破損しているか、別の形式である可能性があり、再度保存すると修正されました。
SQL 2014では、LocalSystem
として実行するようにSQL Serverサービス(MSSQL)を変更しました。これで問題は解決しました。
私が覚えていることから、それは2008年にNT_SERVICE\MSSQL$MSSQL
として正常に動作していました。
私にとっては、ファイルのフォルダに対する許可でした。ユーザー「Everyone」のすべての権限を追加する必要がありました。 Folder/properties/security->すべてのユーザーにユーザーを追加し、すべての権限を設定します。