SQL语句不是空查询

时间:2019-06-08 21:50:51

标签: sql sql-server

有人可以解释为什么在下面的语句中,当它们看起来相同时,一个有效,而另一个无效(忽略一个事实是CREATE,另一个是ALTER)。

“ ALTER TABLE只允许添加可以包含空值或指定了DEFAULT定义的列”,为什么CREATE TABLE允许添加没有指定默认值的空列?

CREATE TABLE Test
(
  ID int NOT NULL
);

ALTER TABLE Test ADD
ID int NOT NULL;

2 个答案:

答案 0 :(得分:1)

您的查询版本不起作用,因为该表已经有一个名为id的列。您不能再添加一个。

但是,您可以添加一个新列,这样就可以了:

ALTER TABLE Test ADD ID2 int NOT NULL;

或者更确切地说,这在空表上有效。您不能将没有NOT NULL的{​​{1}}列添加到具有任何行的表中。现有行将获得该列。但是有什么价值呢?由于DEFAULT的限制,不能为NULL。而且没有其他NOT NULL值。

答案 1 :(得分:1)

假设一个表包含2行数据。
这句话:

ALTER TABLE Test ADD ID int NOT NULL;

(如果可以执行)将创建一个新列,而现有的2行将具有一个id = NULL,尽管您将该列定义为NOT NULL! 看到问题了吗?
但是对于CREATE语句来说,就没有这样的问题,因为在创建时没有数据。