使用默认值将Nullable列更改为NOT NULL

Jim*_*m B 61 sql sql-server alter-table alter-column

今天我遇到了一个旧表,其中一个名为"Created"的日期时间列允许空值.现在,我想要更改它,使其为NOT NULL,并且还包含一个约束以添加默认值(getdate()).

到目前为止,我已经得到了以下脚本,只要我事先清理了所有空值,它就可以正常工作:

ALTER TABLE dbo.MyTable ALTER COLUMN Created DATETIME NOT NULL 
Run Code Online (Sandbox Code Playgroud)

有没有办法在ALTER语句中同时指定默认值?

Abe*_*ler 87

我想你需要做三个单独的陈述.我一直在环顾四周,我所看到的一切似乎都建议你如果要添加一个列就可以这样做,但如果你正在改变一个列则不行.

ALTER TABLE dbo.MyTable
ADD CONSTRAINT my_Con DEFAULT GETDATE() for created

UPDATE MyTable SET Created = GetDate() where Created IS NULL

ALTER TABLE dbo.MyTable 
ALTER COLUMN Created DATETIME NOT NULL 
Run Code Online (Sandbox Code Playgroud)

  • 有没有其他人真的*试过*这个?我发现第二个语句由于表中的空值而失败(尽管存在默认值).您需要在清除现有空值的那两个之间插入一个步骤. (14认同)
  • 看起来有人编辑了答案.它现在是正确和完整的. (2认同)

Gag*_*age 10

您可能必须先将所有空值记录更新为默认值,然后使用alter table语句.

Update dbo.TableName
Set
Created="01/01/2000"
where Created is NULL
Run Code Online (Sandbox Code Playgroud)


Jin*_*alu 6

您需要执行两个查询:

一 - 将默认值添加到所需的列

ALTER TABLE 'Table_Name` 添加 DEFAULT 'value' FOR 'Column_Name'

我想为 Column IsDeleted 添加默认值,如下所示:

示例:ALTER TABLE [dbo].[Employees] ADD IsDeleted 默认为 0

二 - 将可空的列值更改为非空

ALTER TABLE 'table_name' ALTER COLUMN 'column_name' 'data_type' NOT NULL

我想让列 IsDeleted 不为空

ALTER TABLE [dbo].[Employees] 更改列 IsDeleted BIT NOT NULL