【问题标题】:Create a column and make it default to a value创建一列并使其默认为一个值
【发布时间】:2011-10-09 04:45:05
【问题描述】:

您好,我的表中有一个位类型的列,我将为许多数据库运行一个脚本,检查它是否存在,如果它确实存在,我需要更改它并添加一个列并默认它的位值默认为 1

我尝试了以下方法,但是当它创建列时它仍然显示 NULL 我缺少什么?

ALTER TABLE [myTable] ADD [ShippingOption] [bit] NULL DEFAULT 1

谢谢

【问题讨论】:

    标签: sql sql-server-2008


    【解决方案1】:

    只需使用WITH VALUES 让新列采用default 值而不是NULL

    ALTER TABLE [myTable]
    ADD [ShippingOption] [bit] NULL DEFAULT 1 WITH VALUES;
    

    如果您新添加的列标记为NOT NULL,则不需要这样做。在这种情况下,将自动应用默认值。

    【讨论】:

      【解决方案2】:

      当默认约束应用于可空列时,例如在这种情况下,默认值仅应用于从列表中排除列名时的插入。

      通常,这在您创建字段时不适用。 编辑:不过,正如Martin所指出的,通过添加WITH VALUES是可以得到想要的效果的。

      【讨论】:

      • 可能的。看我的回答。
      • 你说得对,那个人从我身边溜走了。感谢您指出这一点!
      【解决方案3】:

      听起来您已经使用默认值创建了列。如果未指定,所有未来的插入都将使用此默认值。

      你说“它仍然显示NULL”。您需要更新现有记录:

      UPDATE myTable
      SET ShippingOption = 1
      WHERE ShippingOption IS NULL;
      

      您的默认值不适用的原因:您的列仍然可以为空。所以在创建时,不需要应用默认值。

      您也可以在ALTER 语句中指定该列为NOT NULL。这将确保应用您的默认值而不需要您发出UPDATE,并确保任何语句在插入时都需要非空值:

      ALTER TABLE [MyTable] ADD [ShippingOption] [bit] NOT NULL DEFAULT 1;
      

      【讨论】:

        猜你喜欢
        • 2017-04-30
        • 2011-05-17
        • 2016-11-05
        • 2016-07-05
        • 2011-11-01
        • 1970-01-01
        • 2022-11-16
        • 1970-01-01
        • 2015-10-28
        相关资源
        最近更新 更多