[英]LINQ-to-SQL query not returning row when where clause compares against NULL value
[英]SQL WHERE clause not returning rows when field has NULL value
好的,所以我知道这个问题:
当SET ANSI_NULLS为ON时,对空值的所有比较均得出UNKNOWN
但是,我试图查询一个DataTable
。
我可以添加到我的查询:
OR col_1 IS NULL OR col_2 IS NULL
对于每列,但我的表有47列,并且我正在构建动态SQL(字符串串联),这样做似乎很痛苦。 还有其他解决方案吗?
我要带回WHERE
比较中所有具有NULL
值的行。
更新
给我带来问题的查询示例:
string query = col_1 not in ('Dorothy', 'Blanche') and col_2 not in ('Zborna', 'Devereaux')
grid.DataContext = dataTable.Select(query).CopyToDataTable();
(如果/当col_1 = null
和/或col_2 = null
时,不检索行)
所以你的意思是(例如2列示例)
WHERE (col1 = 'abc' or col1 is null)
AND (col2 = 3 or col2 is null)
但是您想始终包含空值吗? 这应该工作
WHERE isnull(col1,'abc') = 'abc'
AND isnull(col2, 3) = 3
您这样做是因为要获取NULL值,还是因为不想让NULL值干扰比较?
例如,这:
WHERE col_1 != 'John'
不会返回col_1为NULL的任何行(您在问题中已表明您知道这一点)。
如果要像上面一样通过WHERE子句返回col_1 IS NULL
行,则在MS SQL中有两个选项(一个在mySql中)。
在MS SQL和mySql中, coalesce()
函数都允许您进行这种比较。 在MS SQL中(我相信mySql也是如此),其功能是接受两个或更多参数,并对它们进行顺序求值,并返回找到的第一个非NULL参数。 在MS SQL中,有一个叫做isNull()
的简写函数,它类似于coalesce()
但只需要两个参数。
在上面的示例中,您将执行以下操作:
WHERE coalesce(col_1,'') != 'John'
并且将返回col_1 IS NULL的行以及col_1中不等于“ John”的非NULL值的行。
如果这是您的真正目标,那么此技术应该为您工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.