今天我遇到了一张旧表,其中一个名为'Created'的日期时间列允许空值。现在,我想要更改它,使其为NOT NULL,并且还包含一个约束以添加默认值(getdate())。
到目前为止,我已经有了以下脚本,只要我事先清理了所有空值,它就可以正常工作:
ALTER TABLE dbo.MyTable ALTER COLUMN Created DATETIME NOT NULL
有没有办法在ALTER语句中同时指定默认值?
答案 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;