如何添加 NOT NULL 约束以及列的默认值?

Posted

技术标签:

【中文标题】如何添加 NOT NULL 约束以及列的默认值?【英文标题】:How to add NOT NULL constraint along with default value for the column? 【发布时间】:2020-10-28 08:11:47 【问题描述】:

我在学生表中有一个“名称”列。我需要在此列上添加 NOT NULL 约束。但是我收到 SQL 错误说不能添加空约束,因为表中的现有行在列中有空值。如何在单个 alter 语句中添加空约束和默认值。以下是我的查询。

alter table Student alter column name nvarchar NOT NULL;

【问题讨论】:

您必须先更新现有行。但是您可以使用不验证现有数据的NO CHECK 添加您的约束。 【参考方案1】:

SQL Server 并没有让这变得容易。我认为唯一的方法是将现有值设置为您想要的默认值。然后将列更改为具有默认值和not null

-- Get rid of the existing `NULL` values
update students set name = '' where name is null;

-- Add the NOT NULL constraint
alter table students
    alter column name varchar(255) not null;

-- Add a default value
alter table students
    add constraint df_t_name default '' for name ;

Here 是它在实践中的样子。

【讨论】:

【参考方案2】:

但我收到 SQL 错误提示无法添加空约束,因为表中的现有行在列中有空值。

您是否尝试过覆盖现有的 NULL 值?

当现有值违反该约束时,您不能对列进行约束。您需要首先使您的表符合要求。

【讨论】:

所以没有办法可以将默认值添加到现有列并在单个 ALTER 查询中添加 NOT NULL @swetha 否。约束的目的是保证列中没有违反给定规则的值。如果有办法在存在违规值的情况下添加约束,那么约束将毫无用处。 我通常会这样做 (1) UPDATE tbl SET col = 0 WHERE col IS NULL, (2) ALTER TABLE tbl ALTER COLUMN col int NOT NULL, (3) ALTER TABLE tbl ADD CONSTRAINT df_tbl_col DEFAULT(0) FOR col @swetha - 否,因为仅在插入操作期间才考虑默认值。它不会追溯应用于插入空值的列(实际上,具有默认值的列是有效的,它也允许空值并且有一些)

以上是关于如何添加 NOT NULL 约束以及列的默认值?的主要内容,如果未能解决你的问题,请参考以下文章

苹果cms10如何添加直播?

在QGIS中如何添加天地图的WMTS

如何添加环境变量或路径添加到系统的Path里面

MYSQL如何添加索引

如何添加如图所示的弯曲模态底片?如何在其上方添加关闭按钮?飘飘然

如何将另一个图像添加到滑块的拇指或如何添加两个拇指图像?