80

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

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

ALTER TABLE dbo.MyTable ALTER COLUMN Created DATETIME NOT NULL 

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

4

5 回答 5

99

我认为您需要将其作为三个单独的语句来执行。我一直在环顾四周,我所看到的一切似乎都表明,如果要添加列,则可以这样做,但如果要更改列,则不能。

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 
于 2010-07-06T14:10:34.610 回答
13

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

Update dbo.TableName
Set
Created="01/01/2000"
where Created is NULL
于 2010-07-06T14:24:32.497 回答
7

您需要执行两个查询:

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

更改表“表名”为“列名”添加默认“值”

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

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

二 - 将可以为空的列值更改为不为空

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

我想让列 IsDeleted 不为空

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

于 2015-10-07T16:34:23.927 回答
3

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

试试这个?:

ALTER TABLE dbo.TableName 
  ADD CONSTRAINT DF_TableName_ColumnName
    DEFAULT '01/01/2000' FOR ColumnName
于 2010-07-06T13:53:12.690 回答
0

试试这个

ALTER TABLE table_name ALTER COLUMN col_name data_type NOT NULL;

于 2020-11-10T10:49:46.543 回答