【发布时间】:2015-10-13 09:48:34
【问题描述】:
create table MyTable (id int not null primary key, val int);
insert into MyTable (id, val) values (1, 1), (2, null);
select id, val, val is null as val_null from MyTable;
这当然是有效的 SQL。然而,SQL 服务器在“is null”处抱怨语法无效。为什么会这样?
SQL fiddle:http://sqlfiddle.com/#!6/73f9a/1(我在 SQL Server 2008 和 2014 上试过这个,但在 2014 年我不断收到“糟糕”消息,表明 SQL Fiddle 有问题,可能是暂时的。)
【问题讨论】:
-
有效的 SQL 怎么样?你想做什么?
WHERE val IS NULL? -
具体来说,它如何无效?
-
SQL Server 没有布尔数据类型(就能够定义这种类型的列/变量而言)。因此,您希望
val_null的数据类型是什么? -
当您使用 MySQL 之前,您会注意到它的一些语法变化在其他 DBMS 中是不允许的 :-)
-
顺便说一句,如果您抱怨没有布尔数据类型的 DBMS 完全疯狂,至少 Oracle、DB2 和 Teradata 也不支持它。 MySQL的
BOOLEAN实际上是一个TINYINT(1),它使用0代表FALSE和1代表TRUE,但也允许-128和127(sqlfiddle.com/#!9/1f047/2)之间的任何其他值,很好运气好使用那个糟糕的实现:-)
标签: sql sql-server null