我有一个表,我想添加一个位列,我希望所有现有数据都默认为false。
如何在我为现有行插入false之前允许我指定NOT NULL的方式更改表格?
我应该将其创建为可为空的,执行插入操作而不是将其设置为可空的吗?
答案 0 :(得分:48)
您可以添加列并提供用于所有现有行的默认值。
ALTER TABLE foo
ADD bar bit
DEFAULT 0 NOT NULL;
答案 1 :(得分:3)
ALTER TABLE foo ADD bar bit DEFAULT 0 NOT NULL WITH VALUES;
“with values”子句将默认值指定为现有行。
答案 2 :(得分:2)
作为所列答案的替代方案,还有另一种可用的语法可以更好地适合某些人,例如,如果您使用的工具如“ReadyRoll'。
ALTER TABLE [dbo].[FOO] ADD BAR bit NOT NULL CONSTRAINT [df_Bar] DEFAULT 0
查看this SO answer,看看为什么命名约束(上面的df_Bar
)很好。
答案 3 :(得分:1)
ALTER TABLE dbo.MyTable ADD MyColumn bit NOT NULL DEFAULT 0
对于它的价值,您可以启动企业管理器,在UI中进行更改,然后让它生成更改脚本 - 您可以看到它将如何完成这些任务。
答案 4 :(得分:0)
我也按照你说的“将它创建为可空,执行插入而不是切换为非可空”来完成它。这样做我没有遇到任何问题。
我还不需要找到更好的方法,但是如果有另一种方法我会很感兴趣....
答案 5 :(得分:0)
我通常将字段设置为可为空,默认为false,在您的情况下更新数据库中的所有字段,然后将其切换为null