正确选择value = null的表字段

时间:2019-04-23 10:05:38

标签: c# sql sql-server

有一个字段列表(name1,name2,name3),我需要选择一个值为空的字段

我尝试

select @Listname from Table where (@List is null)

但这是不正确的 它将创建命令

select name1, name2, name3 from table where (name1, name2, name3 is null)

null格式不正确,它将选择所有值,但是我需要选择value = null的字段。

例如我的列表

List<string> NameList = new List<string>() { name1, name2, name3 };

该字段的值 name1 = joe,name2 = doe,name3 = null 我的选择应该像 select name3 frome NameTabe where name3 is null

我使用mssql并像这样在C#上写

var nullValue = SqlClient.Main.CreateCommand(@"
                select @nameList 
                from NameTabe
                where (@nameList is null)"
                , new SqlParam("nameList", nameList) { Array = true }
                )
                .ExecScalars<string>();

2 个答案:

答案 0 :(得分:2)

您似乎想要查询:

select (case when name1 is null then 'name1'
             when name2 is null then 'name2'
             when name3 is null then 'name3'
        end)
from t
where name1 is null or name2 is null or name3 is null;

也许以正确的语法开头将帮助您构建查询。

请注意,只有多个列具有相同的信息,仅用数字(即name1name2等)来区分,这说明数据模型存在问题。我怀疑如果您拥有正确的数据模型,那么完成您真正需要做的事情会容易得多。

答案 1 :(得分:0)

您应该使用这样的动态查询:

select 'select '+case when name1 is null then name1+',' else '' end+
                +case when name2 is null then name2+',' else '' end+
                +case when name3 is null then name3+',' else '' end 
                +' from table' 
from table

如果您需要按null值过滤数据,则可以在以下位置使用cluase:

where name1+name2+name3 is null -- at least 1 of them is null