双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

SQL SERVER 定时更新 EXCEL 文档

我不叫康师傅 我不叫康师傅 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
现在有一个项目需要我每小时 向我自己本机上的一个共享文件夹中的一个excel进行更新。要求不能创建新的文档,只能更新Sheet3$中的数据。

我遇到的困难是:
1. 尝试制作SSIS直接向其中插入新的数据。结果是旧的数据不覆盖,无限叠加。

2. 使用Openrowset直接操作excel。但是excel文件本身不支持delete和truncate操作。如果是单调递增的数据库还好,做一下except检查和update更新就好。如果是大幅度波动的文件,会产生大量过期数据。

3. 尝试使用update为null值。结果发现excel不会自动把null值作为空行处理。但是如果你把所有行全部update成空,再打开excel文件,选中一下A1 保存关闭,excel里的table就干净了。非常诡异

请各位老哥指点,我该怎么完成我的需求,也就是定期完美更新excel里的一个工作表。
(步骤为,清空这个表内的数据,保留所有column,导入全新的数据,数据格式不发生改变)

如果真的要删除这个文件也行 但是生成的excel文件名为B,表格名为Sheet3,这个不能发生改变。
我觉的这个需求大家是不是还挺经常遇到的?大家是怎么处理呢?
不考虑使用java或者.net语言进行操作,尽量仅使用sqlserver。如果需要使用powershell请上详细步骤,这个东西用的太少。
非常感谢

附:
这是我现在使用的语句,请参考路径于数据库名,表名。驱动使用ACE12.0 工作环境不支持JET4.0(发生不可预期的错误)

insert into OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=C:\Users\fu\Desktop\B.xlsx',sheet3$)
select * from expire_pool
except
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=C:\Users\fu\Desktop\B.xlsx','select * from [sheet3$]')
go
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=C:\Users\fu\Desktop\B.xlsx','select * from [Sheet3$]')
--我没有继续往下写,实际上,上方可以加入update语句,以studentid作为主键,进行其他栏目的更新检查,这个没有问题
...全文

相关推荐

评论 15
收藏 已收藏
分享
返回顶部
我不叫康师傅
应用实例 27,579 成员 68,540 内容