【问题标题】:Is there a better way to find rows with all column with values?有没有更好的方法来查找所有列都有值的行?
【发布时间】:2011-04-09 17:08:23
【问题描述】:

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

这些结果集的列数可变。

目前,我能想到的唯一方法是在每个结果集上创建一个视图并以这种方式过滤:

 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 种不同类型的结果集,而且它可能会随着时间的推移而增长,所以我正在寻找一种通用/易于维护的方式

【问题讨论】:

    标签: c# vb.net sql-server-2005 .net-3.5


    【解决方案1】:

    由于空值传播,如果它们都是相同的数据类型,请尝试

    where colA + ColB + ColC, etc Is Not Null
    

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

    where Str(ColA) + Str(ColB) + Str(ColC), etc Is Not Null
    

    【讨论】:

    • +1,不知道 '+' 可以与字符串以外的其他类型一起使用
    • 我更新了我的问题,如果没有更好的方法,我最终可能会使用你的解决方案
    • 检查了这个,但我仍然会使用我的“字段不为空且...”的解决方案,因为找到每个字段的数据类型以确保它们不是 varchar/char 将会真的很长,无论数据类型是什么,至少每个字段上的“不为空”都会起作用
    • 如果您有很多字段并且它们的类型不同,那么您的解决方案可能是最好的...
    【解决方案2】:

    你的方法并不漂亮,但我实际上认为它会表现最好。另一种方法是做

    WHERE (field1 + field2 + field3 + field4) IS NOT NULL
    

    【讨论】:

      【解决方案3】:

      如果 field1, field2, field2... fieldX 是字符串,你可以试试:

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

      【讨论】:

        猜你喜欢
        • 2011-04-28
        • 1970-01-01
        • 2017-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多