2017-10-14 3 views
0

Je suis en cours d'exécution commande suivanteSélectionner les fichiers du dossier mulitple datent de SQL Server

DECLARE @sql varchar(MAX); 
DECLARE @path varchar(255); 

SET @path = 'E:\BILL PRINT\RAVI\' 
SET @sql = 'SELECT * FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'', 
    ''Excel 12.0; Database='[email protected]+''+'*.xlsx;'+' HDR=YES; IMEX=1'', 
    ''SELECT * FROM [sheet1$]'')'; 

SELECT @sql 
EXEC (@sql) 

Mais je reçois cette erreur:

OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "The Microsoft Access database engine could not find the object 'E:\BILL PRINT\RAVI*.xlsx'. Make sure the object exists and that you spell its name and the path name correctly. If 'E:\BILL PRINT\RAVI*.xlsx' is not a local object, check your network connection or contact the server administrator.".

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)".

Est-ce possible d'importer des données à partir des fichiers Excel spécifiés?

S'il vous plaît aidez-moi

+0

oui c'est possible, et je suppose que vous devriez supprimer * char du chemin. –

+0

pas encore de problème exsist – user8205502

Répondre

0

Run SQL Server Management Studio avec Run as administrator et exécuter à nouveau le script.

Et assurez-vous que votre chemin de fichier est correct.

Un seul fichier que vous pouvez lire en même temps. C'est pourquoi votre script devrait être comme ça.

DECLARE @sql varchar(MAX); 
DECLARE @path varchar(255); 

SET @path = 'E:\BILL PRINT\RAVI\currency.xlsx' 
SET @sql = 'SELECT * FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'', 
    ''Excel 12.0; Database='[email protected]+''+';'+' HDR=YES; IMEX=1'', 
    ''SELECT * FROM [sheet1$]'')'; 

EXEC (@sql) 

Si vous souhaitez lire tous les fichiers du dossier. Vous pouvez utiliser ce script. Pour obtenir les noms de fichiers xp_cmdshell utilisé.

DECLARE @sql varchar(MAX); 
DECLARE @path varchar(255); 

DECLARE @fileNames TABLE (flname varchar(255)) 
INSERT @fileNames 
EXEC xp_cmdshell 'dir E:\BILL PRINT\RAVI\*.xlsx /s/b '; 

DECLARE fileCursor CURSOR FOR 
SELECT flname FROM @fileNames WHERE flname is not null 

OPEN fileCursor 
FETCH NEXT FROM fileCursor 
INTO @path 

WHILE @@FETCH_STATUS = 0 
BEGIN 

    SET @sql = 'SELECT * FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'', 
     ''Excel 12.0; Database='[email protected]+''+';'+' HDR=YES; IMEX=1'', 
     ''SELECT * FROM [sheet1$]'')'; 

    EXEC (@sql) 

    FETCH NEXT FROM fileCursor 
    INTO @path 
END 
+0

J'ai essayé mais pas d'effet, mon chemin actuel est E: \ BILL PRINT \ RAVI \ et il y a deux fichiers dans ce dossier: currency.xlsx et currency1.xlsx y a t-il un problème avec ces fichiers. – user8205502

+0

Un seul fichier que vous pouvez ouvrir en même temps, essayez avec 'E: \ BILL PRINT \ RAVI \ currency.xlsx' –

+0

semble que je cours mal commande puis je veux importer tous ces fichiers dans une table en même temps à partir d'un dossier . vous avez une suggestion comment pourrais-je faire cela. – user8205502