2

私はこの openrowset 関数を実行しています:

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
    'Excel 12.0;Database=C:\Users\JCPABALAN\Desktop\Data Migration\ListOfDiscards.xlsx;HDR=YES', 
    'SELECT * FROM [Sheet1$]')

しかし、それは私に次のエラーを与えました

リンク サーバー "(null)" の OLE DB プロバイダー "Microsoft.ACE.OLEDB.12.0" は、"Microsoft Access データベース エンジンはオブジェクト 'Sheet1$' を見つけることができませんでした。オブジェクトが存在すること、およびその名前とスペルを確認してください。パス名を正しく入力してください。'Sheet1$' がローカル オブジェクトでない場合は、ネットワーク接続を確認するか、サーバー管理者に連絡してください。".
メッセージ 7350、レベル 16、状態 2、行 1
リンク サーバー "(null)" の OLE DB プロバイダー "Microsoft.ACE.OLEDB.12.0" から列情報を取得できません。

私はすでに を 1 に設定しており、次のコード行Ad Hoc Distributed Queriesをインストールして実行しました。Microsoft ACE

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

しかし、それでもうまくいきません。

4

1 に答える 1

3

エラーメッセージには2つの部分があります:

リンク サーバー "(null)" の OLE DB プロバイダー "Microsoft.ACE.OLEDB.12.0" は、"Microsoft Access データベース エンジンはオブジェクト 'Sheet1$' を見つけることができませんでした。オブジェクトが存在すること、およびその名前とスペルを確認してください。パス名を正しく入力してください。'Sheet1$' がローカル オブジェクトでない場合は、ネットワーク接続を確認するか、サーバー管理者に連絡してください。".

メッセージ 7350、レベル 16、状態 2、行 1 リンク サーバー "(null)" の OLE DB プロバイダー "Microsoft.ACE.OLEDB.12.0" から列情報を取得できません。

2番目の部分は最初の部分のエラーによるものであるため、主なエラーは最初の部分にあります。それは次のことを示しています:

Microsoft Access データベース エンジンは、オブジェクト 'Sheet1$' を見つけることができませんでした。オブジェクトが存在すること、およびその名前とパス名のつづりが正しいことを確認してください。「Sheet1$」がローカル オブジェクトでない場合は、ネットワーク接続を確認するか、サーバー管理者に問い合わせてください。

一般的な原因と解決策は次のとおりです。

  • パスが存在しません:ファイルまたはパスC:\Users\JCPABALAN\Desktop\Data Migration\ListOfDiscards.xlsxが存在しません。

    注 : SQL ServerC:\は を参照しているため\\Server\C$、SSMS を使用していて を登録しServerて接続している場合、パスは存在しません。
  • ファイルのアクセス許可が拒否されました:ファイルまたはパスC:\Users\JCPABALAN\Desktop\Data Migration\ListOfDiscards.xlsxには、SQL Server サービス アカウントからアクセスできるセキュリティ レベルがあります。SQL Server サービス アカウントへのアクセスを許可できます。

  • シート名が無効です:ワークシートSheet1はワークブック シートの有効なシート名ではありません。名前を変更してください。

于 2015-04-12T11:47:48.543 に答える