如何将列添加到SQL Server中不允许空值的表中?

问题描述:

我有一张表,我想添加一个位列,我希望默认为所有现有数据为false。如何将列添加到SQL Server中不允许空值的表中?

我该如何修改我的表格,以便在我为现有行插入false之前允许指定NOT NULL?

我应该创建它为空,做一个插入,而不是将它切换为不可空?

+0

这是一种方法,是的。 – 2009-12-22 16:27:33

您可以添加列,并提供用于所有现有的默认值行。

ALTER TABLE foo 
ADD bar bit 
DEFAULT 0 NOT NULL; 
+4

我通常喜欢NAME我的约束 - 即使默认约束 - 以防万一我需要稍后放下它们。默认的“DF__TimeZones__IsUsa__3D5E1FD2”这个名字有点难以记住..... – 2009-12-22 17:08:07

我也这样做了,就像你说的“创建它为空,做一个插入而不是将它切换为不可为空”。我这样做没有问题。

我还不需要找到一个更好的办法,但是我很好奇,如果有另一种方式....

我通常创建领域与你的情况更新了数据库中的所有字段为假默认为可为空之前然后切换为null

ALTER TABLE dbo.MyTable ADD MyColumn bit NOT NULL DEFAULT 0 

对于什么是值得的,您可以启动企业管理器,在UI中进行更改,然后让它生成一个更改脚本 - 您可以看到它将如何完成这些类型的任务。

ALTER TABLE foo ADD bar bit DEFAULT 0 NOT NULL WITH VALUES; 

“with values”子句将默认值移植到现有行中。

+1

@marc_s,我只是在没有“WITH VALUES”的情况下为我的位列运行它,它工作正常。你确定? – KingNestor 2009-12-22 16:55:45

+1

@KingNestor,使用默认值1来尝试它,或者不是全部为二进制零的东西。 – 2009-12-22 16:58:42

+4

WITH VALUES用于NULLABLE列的情况,您希望使用默认值而不是NULL。 – 2009-12-22 16:59:14

作为所列答案的替代方案,还有另一种可能适合某些人的语法,例如,如果您使用“ReadyRoll”这样的工具。

ALTER TABLE [dbo].[FOO] ADD BAR bit NOT NULL CONSTRAINT [df_Bar] DEFAULT 0 

退房this SO answer明白为什么命名您的约束(以上df_Bar)是很好的。