为什么我不能选择!= Nvarchar?

时间:2017-05-03 20:51:01

标签: sql sql-server

如下图所示,如果我执行以下查询,我会得到至少10个结果:

SELECT TOP (10) [t0].[u_nonreportable]
FROM [sdidataitem] AS [t0]
WHERE [t0].[u_nonreportable] IS NULL

enter image description here

相比之下,如果我只是执行这样的查询,我就没有结果:

-- Region Parameters
DECLARE @p0 NVarChar(1000) = 'Y'
-- EndRegion
SELECT TOP (10) [t0].[u_nonreportable]
FROM [sdidataitem] AS [t0]
WHERE [t0].[u_nonreportable] <> @p0

enter image description here

如果有 [u_nonreportable]为空的结果,那么当我说 [u_nonreportable]!='Y'时,为什么我没有得到任何结果?< / p>

注意:我在上面的例子中使用LINQPad;但是,我还通过在SSMS中运行SQL查询来确认结果。

1 个答案:

答案 0 :(得分:6)

答案在于SQL Server中NULL的语义。 NULL = NULLNULL != NULL都是假的。因此,当您说[u_nonreportable] != 'Y'时,[u_nonreportable]NULL时结果为false。

更具体地说,当ANSI_NULLS设置为ON时,上述语义为真,即the default且很快就会成为值。