web-dev-qa-db-fra.com

OLE Le fournisseur de base de données 'Microsoft.Jet.OLEDB.4.0' ne peut pas être utilisé pour les requêtes distribuées

Je souhaite importer des données d'Excel vers SQL Server à l'aide de requêtes, pas à l'aide d'un assistant. J'ai essayé cette requête:

Select * INTO g FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 12.0;Database=D:\new.xlsx;HDR=YES', 'SELECT * FROM [newSheet$]');

Mais, je reçois cette erreur:

Msg 7308, niveau 16, état 1, ligne 1
Le fournisseur OLE DB 'Microsoft.Jet.OLEDB.4.0' ne peut pas être utilisé pour les requêtes distribuées car le fournisseur est configuré pour s'exécuter en mode appartement à thread unique.

J'ai donc cherché sur Google, et j'ai obtenu des réponses comme:

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

Même après reconfiguration, cela me montre la même erreur ...

22
Pரதீப்

Selon ce fil ,:

Microsoft.Jet.OLEDB.4.0 n'est pas pris en charge pour le système d'exploitation 64 bits

En supposant que vous exécutez SQL Server 64 bits, vous aurez probablement besoin du 64 bits Microsoft Access Database Engine 2010 Redistributable.

Et sachez qu'il y a une petite ride lorsque vous essayez d'installer le logiciel si l'autre version est déjà installée. Dans ce cas, installez la deuxième version à partir de la ligne de commande à l'aide du commutateur /passif . Selon ce fil :

Le lancement de l'installation d'un fournisseur Microsoft ACE OLEDB sur une machine avec une installation Office autre que la version actuelle (par exemple 32 sur 64) entraînera l'échec de l'installation. Pour le faire fonctionner correctement, vous devez le lancer à partir d'une ligne de commande avec l'argument "/ passif" spécifié.

Il s'agit d'une installation Office existante, mais il en va de même pour les installations de moteur de base de données coexistantes.

EDIT: assurez-vous également d'utiliser "Microsoft.ACE.OLEDB.12.0" et non "Microsoft.Jet.OLEDB.4.0" pour la chaîne du fournisseur. (Accessoires à @Rumi)

30
agentnega