如下图所示,如果我执行以下查询,我会得到至少10个结果:
SELECT TOP (10) [t0].[u_nonreportable]
FROM [sdidataitem] AS [t0]
WHERE [t0].[u_nonreportable] IS NULL
相比之下,如果我只是执行这样的查询,我就没有结果:
-- Region Parameters
DECLARE @p0 NVarChar(1000) = 'Y'
-- EndRegion
SELECT TOP (10) [t0].[u_nonreportable]
FROM [sdidataitem] AS [t0]
WHERE [t0].[u_nonreportable] <> @p0
如果有 [u_nonreportable]为空的结果,那么当我说 [u_nonreportable]!='Y'时,为什么我没有得到任何结果?< / p>
注意:我在上面的例子中使用LINQPad;但是,我还通过在SSMS中运行SQL查询来确认结果。
答案 0 :(得分:6)
答案在于SQL Server中NULL
的语义。 NULL = NULL
和NULL != NULL
都是假的。因此,当您说[u_nonreportable] != 'Y'
时,[u_nonreportable]
为NULL
时结果为false。
更具体地说,当ANSI_NULLS
设置为ON
时,上述语义为真,即the default且很快就会成为值。