Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为什么我不能选择!=Nvarchar?_Sql_Sql Server - Fatal编程技术网

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

Sql 为什么我不能选择!=Nvarchar?,sql,sql-server,Sql,Sql Server,如下图所示,如果执行以下查询,至少会得到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_n

如下图所示,如果执行以下查询,至少会得到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'


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

答案在于SQL Server中null的语义。空=空和空!=空值为false。所以,当你说[你不可移植]!='Y',当[u_nonreportable]为空时,结果为假


更具体地说,当ANSI_NULLS设置为ON时,上述语义是正确的,这是并且很快将是唯一的值。

答案在于SQL Server中NULLS的语义。空=空和空!=空值为false。所以,当你说[你不可移植]!='Y',当[u_nonreportable]为空时,结果为假


更具体地说,当ANSI_NULLS设置为ON时,上述语义是正确的,这是并且很快将是唯一的值。

因为在sql中,NULL永远不等于任何值……而且它也不等于任何值。因为它是NULL,它意味着未知,因此从逻辑上不可能知道或不知道该值是否为“Y”。因为在sql中,NULL永远不等于任何值……而且它也不等于任何值。因为它是空的,它意味着未知,因此从逻辑上不可能知道或不知道该值是否为“Y”。答案很好,非常有趣。所以,在我的例子中,我可能想检查它是否为null,然后检查它是否不等于Y,比如[u_nonreportable]!=null和[u_不可移植]!='如果为空,它会短路吗?试试这个:WHERE ISNULL[t0]。[u_nonreportable],'N'@p0这两个都是未知的,不是错误的。如果他们是假的,在他们面前放一个not会使他们成为真的。SQL使用@user1477388没问题!我假设你的空值相当于N,因为你在寻找Y,你可以根据需要更改该值。@user1477388你可以按照Jacob描述的做,或者使用[u_nonreportable]为空或[u_nonreportable]!='是的。基本上,总是使用IS null或IS NOT null与null进行比较。顺便说一句,Boolean在t-SQL中不会像在C中那样短路,但这并不会真正影响查询语义。答案很好,非常有趣。所以,在我的例子中,我可能想检查它是否为null,然后检查它是否不等于Y,比如[u_nonreportable]!=null和[u_不可移植]!='如果为空,它会短路吗?试试这个:WHERE ISNULL[t0]。[u_nonreportable],'N'@p0这两个都是未知的,不是错误的。如果他们是假的,在他们面前放一个not会使他们成为真的。SQL使用@user1477388没问题!我假设你的空值相当于N,因为你在寻找Y,你可以根据需要更改该值。@user1477388你可以按照Jacob描述的做,或者使用[u_nonreportable]为空或[u_nonreportable]!='是的。基本上,总是使用IS null或IS NOT null与null进行比较。顺便说一句,Boolean在t-SQL中不像在C中那样短路,但这并不真正影响查询语义。