代码之家  ›  专栏  ›  技术社区  ›  IronicMuffin

在使用SQL(ADO)将Excel拉入C中时,如何排除空行而不排除空单元格?

  •  0
  • IronicMuffin  · 技术社区  · 15 年前

    我有如下问题:

    SELECT * FROM OPENROWSET('MSDASQL', 'Driver={Microsoft Excel Driver (*.xls)};DBQ=D:\test.xls','SELECT * FROM Sheet1$]')
    

    这将返回所有空的行(如果曾经编辑过这些行,然后将其删除)。我想排除这些行,但仍然包括数据良好但可能为空单元格的行。

    我的第一直觉是做一个“每列都不是空的”,然后把它们放在一起,就像这样:

    SELECT * FROM OPENROWSET('MSDASQL', 'Driver={Microsoft Excel Driver (*.xls)};   DBQ=D:\test.xls', 'SELECT * FROM Sheet1$]')
    WHERE 
    (
      Col1 IS NOT NULL 
      AND Col2 IS NOT NULL 
      AND Col3 IS NOT NULL 
      AND Col4 IS NOT NULL 
    )
    

    这有效地消除了空行,但出于某种原因,也消除了col4具有空条目的行。我在WHERE条款前后都试过这个。

    是否有人看到我可能做错了什么,或者有人建议我可以使用不同的方法来达到相同的结果?

    这目前正在使用ADO在C中实现,但我正在使用SQL Server Management Studio 2008测试查询。

    1 回复  |  直到 15 年前
        1
  •  3
  •   Joel Coehoorn    15 年前
    WHERE 
    (
      Col1 IS NOT NULL 
      OR Col2 IS NOT NULL 
      OR Col3 IS NOT NULL 
      OR Col4 IS NOT NULL 
    )
    

    其中coalesce(col1、col2、col3、col4)不为空(OLEDB/Excel没有coalesce函数)