使用SQL语句自动化导入多Excel至本地SQL服务器遇注册错误求助
解决SQL Server批量导入多个Excel文件的“服务器未注册”错误
我看了你遇到的问题,核心是你在配置OLEDB属性和使用OPENROWSET时搞错了参数——你用了SQL实例名IN2232315W2\SQLEXPRESS2014,但这里应该指定的是OLEDB驱动的名称。咱们一步步来修正:
1. 确认已安装正确的OLEDB驱动
你需要安装与SQL Server位数(32/64位)匹配的Microsoft Access Database Engine驱动,这是读取Excel文件必需的OLEDB提供者。如果SQL Server是64位,就装64位驱动;如果是32位,装32位(注意:如果系统已经装了32位Office,可能需要用被动模式安装64位驱动)。
2. 正确配置OLEDB驱动属性
用驱动名称替换你代码里的SQL实例名,正确的配置脚本如下:
USE [master] GO -- 配置Microsoft.ACE.OLEDB.12.0驱动属性(Excel 2007+适用) 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
注意:如果是Excel 97-2003文件,驱动名称是
Microsoft.Jet.OLEDB.4.0,但这个驱动只有32位版本。
3. 修正OPENROWSET导入语句
同样,第一个参数要指定OLEDB驱动名称,而不是SQL实例,正确的单文件导入脚本:
SELECT * INTO SU FROM OPENROWSET( 'Microsoft.ACE.OLEDB.12.0', 'Excel 12.0; Database=C:\Users\challa.sriharsha\Desktop\FINAL - VIRTUSA - SOD\SU\SU.xlsx; HDR=YES; IMEX=1', 'SELECT * FROM [SU$]' );
HDR=YES表示Excel第一行是列名IMEX=1表示混合数据类型的列按文本读取,避免数据丢失
4. 批量导入多个Excel文件的自动化脚本
要批量处理文件夹下的所有Excel文件,可以用循环结合动态SQL实现:
USE [master] GO DECLARE @FolderPath NVARCHAR(500) = 'C:\Users\challa.sriharsha\Desktop\FINAL - VIRTUSA - SOD\SU\'; DECLARE @FileName NVARCHAR(100); DECLARE @SQL NVARCHAR(MAX); -- 创建临时表存储文件名 CREATE TABLE #Files (FileName NVARCHAR(100)); -- 插入文件夹下的所有xlsx文件 INSERT INTO #Files EXEC xp_cmdshell 'DIR "' + @FolderPath + '*.xlsx" /B'; -- 循环处理每个文件 DECLARE FileCursor CURSOR FOR SELECT FileName FROM #Files WHERE FileName IS NOT NULL; OPEN FileCursor; FETCH NEXT FROM FileCursor INTO @FileName; WHILE @@FETCH_STATUS = 0 BEGIN -- 生成动态SQL,表名用文件名(去掉.xlsx后缀) SET @SQL = 'SELECT * INTO ' + REPLACE(@FileName, '.xlsx', '') + ' FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'', ' + '''Excel 12.0; Database=' + @FolderPath + @FileName + '; HDR=YES; IMEX=1'', ' + '''SELECT * FROM [Sheet1$]'')'; -- 如果你的Excel表名不是Sheet1,要替换成实际的表名(比如[SU$]) EXEC sp_executesql @SQL; FETCH NEXT FROM FileCursor INTO @FileName; END CLOSE FileCursor; DEALLOCATE FileCursor; DROP TABLE #Files; GO
注意:
- 需要确保SQL Server服务账户有访问目标文件夹的权限
- 如果Excel文件的工作表名称不同,可能需要额外处理(比如读取每个文件的工作表名)
xp_cmdshell默认是禁用的,需要先启用:EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;
额外注意事项
- 如果运行脚本时出现“无法初始化数据源对象”的错误,大概率是驱动位数不匹配(比如64位SQL Server装了32位驱动)
- 确保Excel文件在导入时没有被其他程序打开(比如Excel客户端)
- 对于批量导入,也可以考虑用SSIS(SQL Server Integration Services),可视化配置更灵活,适合复杂的导入场景
内容的提问来源于stack exchange,提问作者Sriharsha Challa
相关产品推荐
相关产品推荐

