用 SQL 语句直接从 Excel 表里把数据导到 SQL Server,其实还挺方便的,尤其适合你平时批量报表或者清洗数据的场景。关键在于用好 OPENROWSETOPENDATASOURCE 这两个函数,配合好连接字符串,基本就能一把梭。

驱动准备的部分别忽略。像 Microsoft.Jet.OLEDB.4.0 这种老牌驱动,在导入 .xls 格式的文件时挺稳定的。如果你用的是 .xlsx,可以考虑换成 ACE.OLEDB.12.0

导入语句也不复杂,比如下面这个:

SELECT * INTO aaa FROM OPENROWSET(
  'Microsoft.Jet.OLEDB.4.0',
  'Excel 8.0;HDR=YES;IMEX=1;DATABASE=D:\WORK\demo.xls;',
  'SELECT * FROM [Sheet1$]'
);

你只需要把路径和 Sheet 名字换掉就行,注意反斜杠要写对。

如果你喜欢更灵活的写法,可以用 OPENDATASOURCE。写法稍微啰嗦点,但原理是一样的:

SELECT * INTO aaa FROM OPENDATASOURCE(
  'Microsoft.Jet.OLEDB.4.0',
  'Data Source="D:\\WORK\\demo.xls";Extended Properties="Excel 8.0;HDR=YES;IMEX=1;"'
)..[Sheet1$];

它的好处是可以动态创建数据源,适合临时需求。

还有几个小建议你得注意:路径里尽量别有中文、空格,文件放到 SQL Server 能访问的盘下。数据类型要对得上,不然直接导失败。实在不行,先建个中间表试一下。

哦对了,如果你想进一步研究,还可以看看这些资源:

如果你经常导数据,可以把这些语句封装成模板,改路径就能复用,效率会高不少。