用 SQL 语句直接从 Excel 表里把数据导到 SQL Server,其实还挺方便的,尤其适合你平时批量报表或者清洗数据的场景。关键在于用好 OPENROWSET 和 OPENDATASOURCE 这两个函数,配合好连接字符串,基本就能一把梭。
驱动准备的部分别忽略。像 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 能访问的盘下。数据类型要对得上,不然直接导失败。实在不行,先建个中间表试一下。
哦对了,如果你想进一步研究,还可以看看这些资源:
如果你经常导数据,可以把这些语句封装成模板,改路径就能复用,效率会高不少。