【问题标题】:How to set default value to existing rows while adding new column with default value to table如何在向表中添加具有默认值的新列时为现有行设置默认值
【发布时间】:2017-08-31 12:44:57
【问题描述】:

我有 100 行的表,我正在添加具有默认值的新列,如下所示。

ALTER  TABLE AccountDetails
ADD    
   UpdatedOn      DATETIME    DEFAULT GETDATE(),
   UpdatedBy      VARCHAR(50) DEFAULT 'System'

在执行这个 alter 语句后,新的列将被添加到表中......这太完美了!但是,这些列的现有行的值将为 NULL。

在默认情况下它是否有默认值,而不是为这些列执行单独的更新语句来显式更新默认值?

【问题讨论】:

    标签: sql-server default alter


    【解决方案1】:

    我自己得到了答案。如果我们在 alter 语句中也加入 NOT NULL 约束,那么在更改表以添加新列时,默认值将应用于新列,并且不会违反非空约束。

       ALTER  TABLE AccountDetails
       ADD    
       UpdatedOn    DATETIME    NOT NULL DEFAULT GETDATE(),
       UpdatedBy    VARCHAR(50) NOT NULL DEFAULT 'System'
    

    【讨论】:

      【解决方案2】:
      ALTER TABLE {TABLENAME} 
      ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
      CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
      [WITH VALUES]
      

      【讨论】:

      • 虽然这段代码可能有助于解决问题,但它并没有解释为什么和/或如何回答问题。提供这种额外的背景将显着提高其长期价值。请edit您的答案添加解释,包括适用的限制和假设。
      • stackoverflow.com/a/92123/6921898 - 用于上下文。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-18
      • 2011-10-11
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多