有一个字段列表(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>();
答案 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;
也许以正确的语法开头将帮助您构建查询。
请注意,只有多个列具有相同的信息,仅用数字(即name1
,name2
等)来区分,这说明数据模型存在问题。我怀疑如果您拥有正确的数据模型,那么完成您真正需要做的事情会容易得多。
答案 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