SQL Server: 从 OPENDATASOURCE 中删除数据

4

这个是有效的:

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来完成这个操作。

2个回答

4

使用OPENDATASOURCE无法删除整行数据。根据http://support.microsoft.com/kb/257819

删除

删除Excel数据的限制比关系型数据源更多。在关系型数据库中,“行”除了“记录”之外没有其他意义或存在;但在Excel工作表中,这种情况并不成立。您可以删除字段(单元格)中的值。但是,您不能执行以下操作:

  • 一次删除整个记录,否则会收到以下错误消息:

此 ISAM 不支持链接表中的删除数据。

您只能通过清空每个单独字段的内容来删除记录。

  • 删除包含Excel公式的单元格中的值,否则会收到以下错误消息:

此上下文中不允许进行操作。

  • 您不能删除已删除数据所在的空电子表格行,并且您的记录集将继续显示对应于这些空行的空记录。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接