【问题标题】:How do I add a column to a table in SQL Server that doesn't allow nulls?如何在不允许空值的 SQL Server 表中添加列?
【发布时间】:2010-12-29 04:19:48
【问题描述】:

我有一个表,我想添加一个位列,我希望将所有现有数据默认为 false。

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

我应该将它创建为可空的,执行插入操作而不是将其切换为不可空吗?

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    我也按照您所说的“将其创建为可为空,插入而不是切换为不可空”。我这样做没有问题。

    我还不需要找到更好的方法,但是如果有其他方法我很感兴趣....

    【讨论】:

      【解决方案2】:

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

      ALTER TABLE foo 
      ADD bar bit 
      DEFAULT 0 NOT NULL;
      

      【讨论】:

      • 我通常喜欢命名我的约束——甚至是默认约束——以防我以后需要删除它们。默认的“DF__TimeZones__IsUsa__3D5E1FD2”名字有点难记.....
      【解决方案3】:

      我通常将字段创建为可空,在您的情况下默认为 false 更新之前数据库中的所有字段,然后将其切换为空

      【讨论】:

        【解决方案4】:
        ALTER TABLE dbo.MyTable ADD MyColumn bit NOT NULL DEFAULT 0
        

        对于它的价值,您可以启动 Enterprise Manager,在 UI 中进行更改,然后让它生成一个更改脚本 - 您可以看到它是如何完成这些任务的。

        【讨论】:

          【解决方案5】:
          ALTER TABLE foo ADD bar bit DEFAULT 0 NOT NULL WITH VALUES;
          

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

          【讨论】:

          • @marc_s,我只是在我的位列没有“WITH VALUES”的情况下运行它并且它有效。你确定吗?
          • @KingNestor,尝试使用默认值 1,或者不是所有二进制零的值。
          • WITH VALUES 用于 NULLABLE 列的情况,并且您希望使用默认值而不是 NULL。
          • @KingNestor:你是绝对正确的 - 如果该列被定义为 NOT NULL,即使没有“WITH VALUES”子句,它也会用默认值填充。感谢您指出了这一点!但是如果列定义为 NULLable,则需要 WITH VALUES
          【解决方案6】:

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

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

          查看this SO answer 了解为什么命名约束(上面的df_Bar)很好。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-10-05
            • 1970-01-01
            • 1970-01-01
            • 2012-11-06
            • 1970-01-01
            • 1970-01-01
            • 2011-07-14
            • 2012-05-01
            相关资源
            最近更新 更多