如何添加 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 约束以及列的默认值?的主要内容,如果未能解决你的问题,请参考以下文章