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

时间:2010-07-06 13:50:09

标签: sql sql-server alter-table alter-column

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

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

ALTER TABLE dbo.MyTable ALTER COLUMN Created DATETIME NOT NULL 

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

5 个答案:

答案 0 :(得分:86)

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

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 

答案 1 :(得分:10)

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

Update dbo.TableName
Set
Created="01/01/2000"
where Created is NULL

答案 2 :(得分:1)

如果是SQL Server,您可以在设计视图中的列属性上执行此操作

试试这个?:

ALTER TABLE dbo.TableName 
  ADD CONSTRAINT DF_TableName_ColumnName
    DEFAULT '01/01/2000' FOR ColumnName

答案 3 :(得分:1)

您需要执行两个查询:

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

  

ALTER TABLE' Table_Name` ADD DEFAULT' value' FOR' Column_Name'

我想将默认值添加到列IsDeleted,如下所示:

  

示例:ALTER TABLE [dbo]。[Employees]为IsDeleted添加默认值0

两个 - 将列值改为可为空(

  

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

我想将列IsDeleted设为非空

  

ALTER TABLE [dbo]。[Employees] Alter Column IsDeleted BIT NOT NULL

答案 4 :(得分:0)

尝试一下

ALTER TABLE table_name ALTER COLUMN col_name data_type NOT NULL;