数值数据类型:SQL

Numeric Data type SQL

提问人:Loopinfility 提问时间:7/7/2022 更新时间:7/9/2022 访问量:233

问:

我想向现有表添加一个新列。我想要一个数字数据类型,并且列的默认值必须为零。所以这就是我正在尝试的。

ALTER TABLE COUNTRY
ADD MOBILE_ACTIVE NUMERIC(1,0) NOT NULL 

我收到以下错误

ALTER TABLE 仅允许添加可以包含 null 或指定了 DEFAULT 定义的列,或者要添加的列是标识或时间戳列,或者如果上述条件均不满足,则表必须为空才能允许添加此列。不能将列“MOBILE_ACTIVE”添加到非空表“COUNTRY”中,因为它不满足这些条件。

SQL 数字

评论

3赞 Sergey 7/7/2022
ALTER TABLE COUNTRY ADD MOBILE_ACTIVE NUMERIC(1,0) NOT NULL DEFAULT 0

答:

1赞 Giovanni Luisotto 7/7/2022 #1

您正在尝试在已包含数据的表中创建一个非 null 列。

您将需要运行

ALTER TABLE COUNTRY
ADD MOBILE_ACTIVE NUMERIC(1,0) NOT NULL 
CONSTRAINT DF_MOBILE_ACTIVE DEFAULT 0 --create DEFAULT CONSTRANTI
WITH VALUES --must be used to populate the col for the existing rows

另一个注意事项...为什么要使用?它只是意味着你得到一个数字 true/false 值的正确数据类型是 ,如果您需要一个小整数,则有合适的数据类型,例如numeric(1,0)bittinyint

0赞 Shmiel 7/7/2022 #2

正如评论中建议@Sergey您应该在错误中添加:default

ALTER TABLE COUNTRY
ADD MOBILE_ACTIVE NUMERIC(1,0) NOT NULL DEFAULT 0

或者你应该允许一个非值,而是一个值为0,所以如果你希望它应该有一个,你应该把它设置为0,如果不是,你应该允许。nullnull0defaultnull

对于日期,你应该使用 ,但对于,有些人说永远不要使用 。nulltextintnull

但需要注意的一件事是,通过使用,你添加一个不允许您在不删除约束的情况下进入列(至少在我使用的 SQL Server 中,不知道其他),所以你应该添加一个名称,如果你希望能够删除它。defaultconstraintdropconstraint