declare @dt datetime = getdate() --ACE导入2007格式Excel SELECT * into #t1 FROM OPENROWSET('microsoft.ace.oledb.12.0','Excel 12.0;database=d:\生物.xlsx', 'select * from [生物$]') select DATEDIFF(ms,@dt,getdate()) set @dt = GETDATE() --导入97--2003格式Excel SELECT * into #t2 FROM OPENROWSET('microsoft.jet.oledb.4.0','Excel 8.0;database=d:\生物.xls', 'select * from [生物$]') select DATEDIFF(ms,@dt,getdate()) drop table #t1 drop table #t2 go ---同样的数据内容,导入2007格式耗时3593毫秒,导入97--2003格式耗时810毫秒,由此可见ACE导入较为耗时 --ACE导入中,Excel改成了8.0竟然也可以导入 SELECT * into #t1 FROM OPENROWSET('microsoft.ace.oledb.12.0','Excel 8.0;database=d:\生物.xlsx', 'select * from [生物$]') --ACE也可导入97--2003格式Excel SELECT * into #t2 FROM OPENROWSET('microsoft.ace.oledb.12.0','Excel 8.0;HDR=yes;database=d:\生物.xls', 'select * from [生物$]') --上述语句其中"HDR=Yes,这代表第一行是标题,不做为数据使用 ,如果用HDR=NO,则表示第一行不是标题,做为数据来使用。系统默认的是YES drop table #t1 drop table #t2 go -- --ACE导入中,支持表单名称包含特殊字符 SELECT * into #t1 FROM OPENROWSET('microsoft.ace.oledb.12.0','Excel 12.0;database=d:\生物.xlsx', 'select * from [生物(单科)$]') --ACE不支持默认表单名称导入,否则返回消息 "无效的 SQL语句;期待 'DELETE'、'INSERT'、'PROCEDURE'、'SELECT'、或 'UPDATE'。"。 --SELECT * into #t2 FROM OPENROWSET('microsoft.ace.oledb.12.0','Excel 8.0;HDR=yes;database=d:\生物.xls', '[生物(单科)$]') --上述语句其中"HDR=Yes,这代表第一行是标题,不做为数据使用 ,如果用HDR=NO,则表示第一行不是标题,做为数据来使用。系统默认的是YES drop table #t1 其中OpenRowset的组后一个参数既可以是表单名称(注不添加引号,并且格式为[SheetName$]),或者为select查询字符串,如果表单名称中包含特殊字符如括号等,则需要采用第二种方式。