请考虑以下Transact sql。奇怪的SQL行为,我想知道为什么它的工作方式如此
DECLARE @table TABLE(val VARCHAR(255) NULL)
INSERT INTO @table (val) VALUES('a')
INSERT INTO @table (val) VALUES('b')
INSERT INTO @table (val) VALUES('c')
INSERT INTO @table (val) VALUES('d')
INSERT INTO @table (val) VALUES(NULL)
select val
from @table
where val not in ('a')
我希望它可以返回
b, c, d, NULL
,而是它返回
b, c, d
为什么会出现这种情况? NULL没有被评估?某种程度上在设置'a'中是否为NULL?
我相信,如果你改变你的Where-Clause,你仍然可以选择那些NULL。像这样:'WHERE VAL NOT IN('a')OR VAL IS NULL'。但是,NULL肯定不会被设置为'a'。 – 2010-03-25 20:34:24
我最近遇到了类似的问题。在被这种行为烧毁之前,您可以使用SQL多长时间令人惊叹。 – harpo 2010-03-25 20:37:23
PS。我经常说'我*******恨空!' – CResults 2010-03-25 20:41:01