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

有没有更好的方法来查找所有列都有值的行?

  •  4
  • Fredou  · 技术社区  · 14 年前

    我需要在结果集中找到每列都不带空的行。

    这些结果集的列数可变。

    目前,我能想到的唯一方法是在每个结果集上创建一个视图,并用这种方式进行筛选:

     select field1, field2, field3, field4, ...
     from "huge query"
     where field1 is not null and  
           field2 is not null and  
           field3 is not null and  
           field4 is not null and
           ...  is not null
    

    在SQL Server中的存储过程/函数或.NET代码(C或VB.NET)中,是否有更好的方法来执行此操作?

    做点什么呢

     select field1, field2, field3, field4, ...
     from "huge query"
     (return to .net apps or insert into #temptable)
    

    然后,在存储过程/函数或.NET代码(c/vb.net)中,循环遍历所有行/列并标记或删除所有得到空值的行?

    我说的很容易超过50种不同类型的结果集,而且可能会随着时间的推移而增长,所以我正在寻找一种通用的/易于维护的方法

    3 回复  |  直到 8 年前
        1
  •  3
  •   Charles Bretana    14 年前

    因为nulls传播,如果它们都是相同的数据类型,请尝试

    where colA + ColB + ColC, etc Is Not Null
    

    如果它们不是,那么首先将它们全部(那些还不是字符串的)转换为char,然后将它们连接起来。

    where Str(ColA) + Str(ColB) + Str(ColC), etc Is Not Null
    
        2
  •  3
  •   D'Arcy Rittich    14 年前

    你的方法不太好,但我认为它能发挥最好的效果。另一种方法是

    WHERE (field1 + field2 + field3 + field4) IS NOT NULL
    
        3
  •  0
  •   Larry    14 年前

    如果field1、field2、field2…fieldx是字符串,您可以尝试:

    select field1, field2, field3, field4, ...
    from "huge query"
    where field1 + field2 + field3 + ... + fieldX is not null