SQL Server:DELETE FROM OPENDATASOURCE

时间:2013-05-31 03:27:36

标签: sql-server tsql

这有效:

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 个答案:

答案 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