如何将Excel文件中指定工作表批量插入至SQL Server?
用SQL Server导入Excel多工作表数据的解决方案
首先明确:BULK INSERT不支持直接读取Excel文件,它仅适用于文本类数据源(如CSV、TXT)。Excel属于二进制格式文件,需要借助OLE DB驱动(如Microsoft.ACE.OLEDB.12.0)来读取指定工作表。
读取指定工作表(GotvShiftsTab)的代码示例
你可以使用OPENROWSET替代BULK INSERT,实现指定工作表的数据导入:
DROP TABLE IF EXISTS #GotvShifts CREATE TABLE #GotvShifts ( VANID varchar(100), contact_name varchar(100), signup_date varchar(100), status_ varchar(100), role_ varchar(100), event_name varchar(100), event_type varchar(100), event_date varchar(100), shift_start_time varchar(100), shift_end_time varchar(100), location_name varchar(100), recruited_by varchar(100) ) -- 导入GotvShiftsTab工作表的数据 INSERT INTO #GotvShifts SELECT * FROM OPENROWSET( 'Microsoft.ACE.OLEDB.12.0', 'Excel 12.0 Xml;HDR=YES;Database=\\na2-fs1\DCDATA6\Cases\Active\47758 – Meza v Coty\Team Member Folders\AS\data_exam_q1_datasets.xlsx', 'SELECT * FROM [GotvShiftsTab$]' )
导入第二个工作表的方法
如果第二个工作表结构与#GotvShifts一致,可直接追加数据:
-- 假设第二个工作表名为SecondTab INSERT INTO #GotvShifts SELECT * FROM OPENROWSET( 'Microsoft.ACE.OLEDB.12.0', 'Excel 12.0 Xml;HDR=YES;Database=\\na2-fs1\DCDATA6\Cases\Active\47758 – Meza v Coty\Team Member Folders\AS\data_exam_q1_datasets.xlsx', 'SELECT * FROM [SecondTab$]' )
若第二个工作表结构不同,需先创建对应结构的临时表,再执行上述INSERT逻辑。
注意事项
- 确保SQL Server服务运行账户拥有共享文件夹
\\na2-fs1\DCDATA6\...的读取权限 - 服务器需安装Microsoft Access Database Engine 2010 Redistributable(提供
Microsoft.ACE.OLEDB.12.0驱动) - Excel文件路径需使用双反斜杠
\\,或把共享路径映射为本地驱动器后使用驱动器路径
内容的提问来源于stack exchange,提问作者Austin Salley
相关产品推荐
相关产品推荐

