10
votes

Obtenez une feuille Excel dans la table TEMP à l'aide d'un script

im essayant d'obtenir cette feuille Excel dans une table, je peux donc appliquer des instructions de sélection, etc., pour mettre à jour les tableaux avec ses informations. XXX

IM exécutant 64 bits. Aucune idée de la version Excel c'est.

Erreur:

msg 7399, niveau 16, état 1, ligne 1 Le fournisseur OLE DB "Microsoft.Jet.Oledb.4.0" pour serveur lié "(NULL)" a signalé une erreur. Le fournisseur n'a donné aucune information sur l'erreur. MSG 7303, niveau 16, état 1, ligne 1 Impossible d'initialiser l'objet Source de données du fournisseur OLE DB "Microsoft.Jet.Ooledb.4.0" pour serveur lié "(NULL)".

Quand je passe à Excel 12.0;

Fournisseur OLE DB "Microsoft.Jet.Oledb.4.0" pour le serveur lié "(NULL)" Message renvoyé "Impossible de trouver une ISAM installable". MSG 7303, niveau 16, état 1, ligne 1 Impossible d'initialiser l'objet Source de données du fournisseur OLE DB "Microsoft.Jet.Ooledb.4.0" pour serveur lié "(NULL)".


4 commentaires

Quand j'ai reçu ces erreurs, notre DBA a été informé par notre DBA, car ce pilote doit être installé sur le serveur. Est-ce installé sur le vôtre?


@Bluefeet C'est actuellement mon ordinateur portable et je n'ai rien installé de plus, donc si ce n'est pas en 2008 R2. puis nope.


Il y a parfois, j'ai eu une erreur de 7399 en raison d'une incompatibilité des pilotes ODBC 32/64 bits. J'essayais de lire des données d'une feuille de calcul Excel à un SQL Server 2008 R2 64 bits. Le pilote Microsoft-Jet.Oledb est de 32 bits. Malheureusement, je ne pouvais pas résoudre le problème et je devais installer un serveur 32 bits pour lire des fichiers Excel.


J'allais accidentellement du mauvais serveur, il était donc 32 bit, cela ne fonctionne pas du tout sur mon ordinateur portable. Le même problème existe. Ive est parti pour le format de fichier CSV plutôt, semble fonctionner. Merci les gars.


3 Réponses :


8
votes

pour les fichiers XLSX (Excel 2007-2010) Vous pouvez utiliser le fournisseur ACE OLEDB au lieu de JET

SELECT * 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
    'Excel 12.0;HDR=YES;Database=C:\PB.xlsx',
    'SELECT * FROM [Sheet1$]');


3 commentaires

Je reçois cette ligne Impossible de créer une instance de OLE DB Fournisseur "Microsoft.ace.Onedb.12.0" pour serveur lié "(null)".


Oublié de mentionner que vous devez avoir Office 2007+ installé sur le serveur ou sur ce composant: Microsoft.com/en-us/download/details.aspx?id=23734


Pouvez-vous essayer la solution 3 à partir d'ici: aspsnippets.com/articles/...



8
votes

Il y a 5 causes possibles pour cette erreur.

  1. Le moteur à réaction doit être installé sur le serveur. Installation de MS Office sur le serveur trie de cela.
  2. Le chemin d'accès au XLS est relatif au serveur, pas le poste de travail que vous utilisez la commande de
  3. Le compte qui exécute le service SQL Server doit avoir un accès en écriture dans le dossier où le XLS est. Une solution possible consiste à modifier les variables TEMP = et TMP = environnement du compte de démarrage de service (par exemple, administrateur) à (par exemple) C: \ Temp, puis activez la commande totale sur C: \ Temp to tout le monde

    4 ... xxx

    5 .... xxx

    maintenant je n'ai pas t sais pourquoi cela fonctionne, en particulier considérant que tout le monde dit qu'ils devraient être réglés à 1. Pour moi, les définir à zéro, a fait l'affaire pour l'instruction SQL suivante sur SQL Server 2008R2 32bit et M $ Office 2007 XXX

    Remarque: j'ai volontairement utilisé un exemple dans lequel le nom de fichier et le nom de la feuille de calcul ont des espaces pour montrer que cela peut être fait.


3 commentaires

J'ai utilisé le fichier CSV à la fin, mais le marquant comme correct en raison d'une bonne réponse détaillée et multi-options.


Comme mentionné dans l'autre réponse, vous pouvez essayer microsoft.ace.oledb.12.0 , même avec Excel 8.0


Plus 1 pour utiliser des espaces dans les noms.



1
votes

Juste au cas où quelqu'un d'autre trébuche ces années plus tard, comme je l'ai fait, c'est ce qui a fonctionné pour moi:

Nous avions une boîte qui avait SQL Server Express 2012 sur une machine Windows 8 64 bits sans version de bureau installée . P>

Voici une partie de ma configuration de la procédure excédentaire stockée: p> xxx pré>

(le reste de l'instruction SELECT ci-dessous) P>

J'ai reçu cette erreur: p>

SQL Server a bloqué l'accès à la déclaration 'OpenRowset / OpendaAsource' de composant 'Les requêtes distribuées par ad hoc' parce que ce composant est désactivé dans le cadre de la configuration de sécurité pour ce serveur. UNE L'administrateur système peut activer l'utilisation de 'ad hoc distribué Requêtes 'en utilisant sp_configure. Pour plus d'informations sur l'activation «Queries distribuées par ad hoc», recherchez 'Queries Distributed ad hoc' Dans les livres SQL Server en ligne. P> blockQquote>

Nous avons changé la configuration: p>

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


0 commentaires