【发布时间】:2010-12-29 04:19:48
【问题描述】:
我有一个表,我想添加一个位列,我希望将所有现有数据默认为 false。
如何更改我的表,以便在我为现有行插入 false 之前指定 NOT NULL?
我应该将它创建为可空的,执行插入操作而不是将其切换为不可空吗?
【问题讨论】:
标签: sql sql-server
我有一个表,我想添加一个位列,我希望将所有现有数据默认为 false。
如何更改我的表,以便在我为现有行插入 false 之前指定 NOT NULL?
我应该将它创建为可空的,执行插入操作而不是将其切换为不可空吗?
【问题讨论】:
标签: sql sql-server
我也按照您所说的“将其创建为可为空,插入而不是切换为不可空”。我这样做没有问题。
我还不需要找到更好的方法,但是如果有其他方法我很感兴趣....
【讨论】:
您可以添加列并提供用于所有现有行的默认值。
ALTER TABLE foo
ADD bar bit
DEFAULT 0 NOT NULL;
【讨论】:
我通常将字段创建为可空,在您的情况下默认为 false 更新之前数据库中的所有字段,然后将其切换为空
【讨论】:
ALTER TABLE dbo.MyTable ADD MyColumn bit NOT NULL DEFAULT 0
对于它的价值,您可以启动 Enterprise Manager,在 UI 中进行更改,然后让它生成一个更改脚本 - 您可以看到它是如何完成这些任务的。
【讨论】:
ALTER TABLE foo ADD bar bit DEFAULT 0 NOT NULL WITH VALUES;
“with values”子句将默认值传播到现有行中。
【讨论】:
作为列出的答案的替代方案,还有另一种可能更适合某些人的可用语法,例如,如果您使用“ReadyRoll”之类的工具。
ALTER TABLE [dbo].[FOO] ADD BAR bit NOT NULL CONSTRAINT [df_Bar] DEFAULT 0
查看this SO answer 了解为什么命名约束(上面的df_Bar)很好。
【讨论】: