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

时间:2010-09-08 12:09:20

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

我需要在结果集中找到每列都没有null的行。

这些结果集的列数可变。

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

 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)中循环遍历所有行/列并标记或删除任何得到null的行?

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

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

where colA + ColB + ColC, etc Is Not Null

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

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

答案 2 :(得分:0)

如果field1,field2,field2 ... fieldX是字符串,您可能想尝试:

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