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 来实现这一点。

4

2 回答 2

4

您不能通过 OPENDATASOURCE 删除整行。根据http://support.microsoft.com/kb/257819

删除

与关系数据源中的数据相比,您在删除 Excel 数据方面受到的限制更大。在关系数据库中,“行”除了“记录”之外没有任何意义或存在;在 Excel 工作表中,这是不正确的。您可以删除字段(单元格)中的值。但是,您不能:

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

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

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

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

在这种情况下不允许操作。

  • 您无法删除已删除数据所在的空电子表格行,并且您的记录集将继续显示与这些空行对应的空记录。
于 2013-05-31T03:37:00.137 回答
4

谢谢尤里里——我就是这么想的。

对于我这种情况的其他任何人,这是我“最干净”的解决方法:获取文件的空白版本(在我的情况下,“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
于 2013-05-31T04:29:55.700 回答