SQL Server实现类似Access链接表及ETL导入功能咨询
当然可以实现!作为SQL Server新手,你熟悉SQL查询的话,上手这些方法其实挺快的,下面我给你拆解几种适合你的方案:
方案1:用SSIS做可视化ETL(自动化首选)
如果你想要完全自动化的流程,SQL Server的SSIS(SQL Server Integration Services)就是专门干这个的,比Access的手动查询更省心:
- 先装个SQL Server Data Tools(SSDT)(和SSMS配套,需要单独下载安装),打开后新建一个Integration Services项目
- 从工具箱里拖个Excel源组件,配置它指向你的每日更新电子表格(注意选对Excel版本,.xlsx对应「Excel 12.0 Xml」)
- 再拖个SQL Server目标组件,连接到你要导入的SQL Server表,把Excel和SQL表的字段一一映射好
- 要是你需要用之前写的SQL逻辑做数据转换,还可以加个执行SQL任务组件,把你的查询嵌进去,灵活度拉满
- 最后用SQL Server Agent创建定时作业,让这个SSIS包每天自动运行,彻底解放双手
方案2:用OPENROWSET直接写SQL(最贴近你之前的习惯)
如果你不想碰可视化工具,只想用熟悉的SQL语句搞定,完全没问题!SQL Server支持直接查询Excel文件,步骤很简单:
- 首先得开启Ad Hoc Distributed Queries(默认没开,跑下面的脚本就行):
sp_configure 'show advanced options', 1; RECONFIGURE; sp_configure 'Ad Hoc Distributed Queries', 1; RECONFIGURE;
- 然后就可以像查Access链接表一样查Excel数据,比如:
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0 Xml;HDR=YES;Database=C:\你的文件路径\每日更新表.xlsx', 'SELECT * FROM [Sheet1$]')
- 接下来把这个查询和你的ETL逻辑结合,用
INSERT INTO...SELECT或者MERGE导入SQL表,比如:
INSERT INTO 你的SQL表名 (字段1, 字段2, 字段3) SELECT 字段1, 字段2, 字段3 FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0 Xml;HDR=YES;Database=C:\你的文件路径\每日更新表.xlsx', 'SELECT * FROM [Sheet1$]') WHERE -- 你的过滤、转换逻辑
- 同样用SQL Server Agent创建定时作业,每天自动执行这个脚本就ok
方案3:配置Linked Server(类Access链接表)
如果你想把Excel当成长期可用的“链接表”,不用每次写长路径,可以配置Linked Server:
- 在SSMS里展开「服务器对象」→「链接服务器」,右键新建链接服务器
- 链接服务器类型选「其他数据源」,OLE DB提供程序选
Microsoft.ACE.OLEDB.12.0 - 产品名称填
Excel,数据源填你的Excel文件全路径,比如C:\你的文件路径\每日更新表.xlsx - 配置好之后,你就可以像访问本地表一样查Excel数据:
SELECT * FROM [链接服务器名称]...[Sheet1$]
- 后续同样可以结合你的ETL SQL,再用定时作业自动同步
新手避坑小提示
- 优先从OPENROWSET入手,最贴近你之前在Access写SQL的习惯,不用学新工具就能上手
- 注意文件权限:SQL Server的服务账户得能访问Excel文件所在的文件夹,不然会报权限错误
- 如果是.xls格式的老Excel,要把OLEDB提供程序换成
Microsoft.Jet.OLEDB.4.0,但这个只支持32位——如果你的SQL Server是64位,得先装64位的ACE驱动 - 要定时运行的话,得确保SQL Server Agent服务是启动的,在SSMS里展开「SQL Server代理」右键启动就行
内容的提问来源于stack exchange,提问作者JimT
相关产品推荐
相关产品推荐

