这有效:
SELECT * FROM OPENDATASOURCE(
'Microsoft.ACE.OLEDB.12.0',
'Data Source=d:\JobFiles\MyFile.xlsx;
Extended properties=Excel 8.0')...MySheet$
这样做:
INSERT INTO OPENDATASOURCE(
'Microsoft.ACE.OLEDB.12.0',
'Data Source=d:\JobFiles\MyFile.xlsx;
Extended properties=Excel 8.0')...MySheet$
SELECT * FROM blahblahblah
为什么不呢?
DELETE FROM OPENDATASOURCE(
'Microsoft.ACE.OLEDB.12.0',
'Data Source=d:\JobFiles\MyFile.xlsx;
Extended properties=Excel 8.0')...MySheet$
我做了一些没有真正运气的搜索。在一天结束时,我需要的是在插入新数据之前删除了excel行,我想用SQL来实现这一点。
答案 0 :(得分:4)
您无法通过OPENDATASOURCE删除整行。根据{{3}}:
删除强>
删除Excel数据比限制数据更受限制 关系数据源。在关系数据库中,“行”没有意义 或“存在”以外的存在;在Excel工作表中,这不是 真正。您可以删除字段(单元格)中的值。但是,你不能:
- 立即删除整个记录,或者收到以下错误消息:
此ISAM不支持删除链接表中的数据。
您只能通过删除每个记录的内容来删除记录 个别领域。
- 删除包含Excel公式的单元格中的值,或者收到以下错误消息:
在此上下文中不允许操作。
- 您无法删除已删除数据所在的空电子表格行,并且您的记录集将继续显示为空 与这些空行对应的记录。
答案 1 :(得分:4)
谢谢Yuriry - 这就是我的想法。
对于我的情况中的其他任何人,这是我'最干净'的解决方法:获取文件的空白版本(在我的情况下,'MyFileBlank.xlsx')并按照以下内容进行操作:
--delete existing file
exec master..xp_cmdshell 'del d:\JobFiles\MyFile.xlsx'
go
--create new file from blank template
exec master..xp_cmdshell 'copy d:\JobFiles\MyFileBlank.xlsx d:\JobFiles\MyFile.xlsx'
go
INSERT INTO OPENDATASOURCE( 'Microsoft.ACE.OLEDB.12.0',
'Data Source=d:\JobFiles\MyFile.xlsx;
Extended properties=Excel 8.0')...MySheet$
SELECT * FROM blahblahblah