web-dev-qa-db-fra.com

Excel dans SQL Server avec Microsoft.ACE.OLEDB.12.0

Le message d'erreur suivant s'affiche lorsque j'essaie d'ouvrir un fichier Excel dans SQL Server 2008 R2 64 bits:

Msg 7399, Level 16, State 1, Line 1
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 1
Cannot initialize the data source object of OLE DB provider 
"Microsoft.ACE.OLEDB.12.0" for linked server "(null)".

J'utilise la requête suivante:

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0; 
HDR=NO; IMEX=1; Database=\\filepath\filename.xlsx', 'SELECT * FROM [Sheet1$]')

La chose amusante est que le DBA peut l'exécuter sans problème. J'ai parcouru et exécuté les requêtes suivantes:

sp_configure 'Show Advanced Options', 1;
RECONFIGURE;
GO
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

Le compte qui l'exécute a l'air d'avoir un accès. Quelle pourrait être la cause de ce problème?

5
user1238918

avez-vous essayé (à titre de test) de copier le fichier Excel sur le lecteur SQL Server C:\et d'exécuter la requête sur ce chemin?

que se passe-t-il lorsque vous accédez au serveur et ouvrez ce chemin dans la boîte de dialogue Explorateur/Exécuter:\chemin du fichier\nom du fichier.xlsx ?

Pouvez-vous exécuter cette requête: exec master..xp_cmdshell 'dir'\filepath\filename.xlsx '?

Cela vous aidera à déterminer s'il s'agit d'un problème de droits réseau ou si le compte dispose des autorisations nécessaires pour utiliser des requêtes distribuées.

Mon intuition est que c'est définitivement un problème de droits/permissions, car l'administrateur de base de données peut l'exécuter.

4

Comme Philip l'a dit ... vérifiez d'abord l'exécution de xp_cmdshell. S'il n'est pas en cours d'exécution en raison d'un problème d'autorisation, reconfigurez d'abord cette option en exécutant

SP_CONFIGURE 'XP_CMDSHELL',1
GO             
RECONFIGURE

après cette exécution, la commande suivante permet d'activer les autorisations de serveur lié pour les capacités InProcess du pilote ACE:

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

Maintenant, lancez cette série de commandes:

sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE

si une erreur survient, exécutez chaque commande séparément. Et enfin, exécutez importer toutes vos données Excel sur un serveur SQL en exécutant la commande mentionnée ci-dessous:

SELECT * INTO TargetTableName FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
                         'Excel 12.0;Database=FilePath\fileName.xlsx;HDR=YES',
                         'SELECT * FROM [sheetName$]')

Rappelez-vous que dans le cas de xls, vous devez utiliser Jet Driver au lieu de ACE. De plus, le TargetTableName ne doit pas exister avant d’exécuter cette requête. Happy coding :)

4

SQL Server Management Studio. Tapez Services.msc dans la commande d'exécution pour ouvrir la fenêtre de services.

Recherchez le service SQL Server, cliquez dessus avec le bouton droit et sélectionnez Propriétés.

Dans l'onglet Connexion, sélectionnez le compte système/ou sélectionnez votre ID de domaine, votre compte et votre mot de passe.

Une fois que votre nom de connexion a été trouvé, appuyez sur OK.

Maintenant, tapez vos mots de passe de connexion dans les deux champs.

Redémarrez les services afin que les nouvelles modifications soient appliquées comme indiqué dans la figure ci-dessous.

Maintenant, démarrez SQL Server Management Studio et essayez d’exécuter la requête si cela ne fonctionne toujours pas, essayez un redémarrage du système.

ou exécuter la requête.

USE [maître] 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

0
Subhash Chander

Veuillez utiliser une barre oblique au lieu d'une barre oblique

Select * From OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;DATABASE=//ComputerName/ShareMyLocation/DatabaseSheet.xlsx;IMEX=1','Select * From [SMDH-View2$]')
0