2017-10-14 84 views
0

我运行下面的命令选择多张文件从文件夹,日期到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) 

但我得到这个错误:

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

是不是可以从指定的Excel文件导入数据?

请帮我

+0

是的,这是可能的,我想你应该从路径中删除* char。 –

+0

没问题仍然存在 – user8205502

回答

0

运行SQL Server Management StudioRun as administrator,并再次执行脚本。

并确保您的文件路径是正确的。

只有一个文件可以同时读取。这就是为什么你的脚本应该是这样的。

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) 

如果你想读取文件夹中的所有文件。你可以使用这个脚本。获取使用的文件名xp_cmdshell

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

我试过但没有影响,我的实际路径是E:\ BILL PRINT \ RAVI \,并且此文件夹名称中有两个文件是currency.xlsx和currency1.xlsx是否存在这些文件的任何问题。 – user8205502

+0

只有一个文件,你可以同时打开,尝试'E:\ BILL PRINT \ RAVI \ currency.xlsx' –

+0

好像我运行错误的命令,然后我想从一个文件夹中同时导入一个表中的所有这些文件。你有什么建议我怎么能做到这一点。 – user8205502