Sql server 两者之间有什么区别!=不是吗?和一般为空

Sql server 两者之间有什么区别!=不是吗?和一般为空,sql-server,sql-server-2000,Sql Server,Sql Server 2000,我在理解t-sql如何处理空值方面有点困难 作为一个C#guy,我倾向于 IF(@myVar != null)... 但是,这似乎从未运行过我的代码。我也是 IF(@myVar is not null) 有什么区别 其次,加法的工作方式尚不清楚。假设我有 declare @someCount int, @someFinalResult int --Select that returns null SELECT @someCount = columnName from tableName w

我在理解t-sql如何处理空值方面有点困难

作为一个C#guy,我倾向于

IF(@myVar != null)...
但是,这似乎从未运行过我的代码。我也是

IF(@myVar is not null)
有什么区别

其次,加法的工作方式尚不清楚。假设我有

declare @someCount int, @someFinalResult int

--Select that returns null
SELECT @someCount = columnName from tableName where someColumn = someValue
如果我这样做了

SET @someFinalResult = @someCount + 1--I seem to get NULL if I had null + something
但是,如果我先

declare @someCount int, @someFinalResult int
--FIRST SET DEFAULT TO 0
SET @someCount = 0

--Select that returns null
SELECT @someCount = columnName from tableName where someColumn = someValue

现在,
@someCount
默认为0,即使结果为NULL,它实际上也不会设置为NULL。为什么?

通常,它是这样的:
NULL
是未知的,所以
=NULL也是未知的,因为您不知道它是否相等。你甚至不知道两个未知数是否相等。这或多或少适用于任何未知操作,当您向未知添加某些内容时,结果几乎不为您所知。

通常,它是这样的:
NULL
是未知的,所以
=NULL也是未知的,因为您不知道它是否相等。你甚至不知道两个未知数是否相等。这同样适用于或多或少的任何未知操作,当您向未知添加某些内容时,结果几乎不为您所知。

当您处理所有未知操作时,您基本上都在处理这些操作

在你的例子中

IF(@myVar!=null)
vs
IF(@myVar不为null)

它基本上归结为一个问题:
@myVar=null
@myVar为null

@myVar=null
将始终计算为null,因为您要求的是:

@myVar中的值是否等于未知值

因为您不知道未知是什么,所以这个问题不能用是或否来回答,因此它的计算结果为未知

e.g. 
    "is 1 = UNKNOWN" - I do not know
    "is 'a' = UNKNOWN" - I do not know 
    "is UNKNOWN = UNKNOWN" - I do not know
最后一个可能有点棘手,但想象一下,你有两个装有苹果的盒子,你既不知道盒子1和盒子2中有多少苹果,所以问:

is count(box1) = count(box2)
is the same as 
is UNKNOWN = UNKNOWN"
所以答案是
我不知道

第二个
@myVar为null
不同,就像是在询问

is the value in @myVar UNKNOWN
不同之处在于,您特别询问“存储在变量中的值是否未知?”

当你处理这些问题时,你基本上是在处理所有的问题

在你的例子中

IF(@myVar!=null)
vs
IF(@myVar不为null)

它基本上归结为一个问题:
@myVar=null
@myVar为null

@myVar=null
将始终计算为null,因为您要求的是:

@myVar中的值是否等于未知值

因为您不知道未知是什么,所以这个问题不能用是或否来回答,因此它的计算结果为未知

e.g. 
    "is 1 = UNKNOWN" - I do not know
    "is 'a' = UNKNOWN" - I do not know 
    "is UNKNOWN = UNKNOWN" - I do not know
最后一个可能有点棘手,但想象一下,你有两个装有苹果的盒子,你既不知道盒子1和盒子2中有多少苹果,所以问:

is count(box1) = count(box2)
is the same as 
is UNKNOWN = UNKNOWN"
所以答案是
我不知道

第二个
@myVar为null
不同,就像是在询问

is the value in @myVar UNKNOWN
不同之处在于,您特别询问“存储在变量中的值是否未知?”