【问题标题】:Force default value when adding column to table - SQL Server将列添加到表时强制使用默认值 - SQL Server
【发布时间】:2008-09-19 08:10:17
【问题描述】:

在 SQL Server 2000/2005 中,

是否可以在向表中添加新列时强制将默认值写入已经存在的行在新列上使用 NOT NULL?

【问题讨论】:

    标签: sql-server database


    【解决方案1】:

    您需要两个语句。首先创建不为空的列。然后将not null约束改为nullable

    alter table mytable add mycolumn varchar(10) not null default ('a value')
    alter table mytable alter column mycolumn varchar(10) null
    

    【讨论】:

      【解决方案2】:

      我理解您的问题,但您是说对于未来的记录,NULL(未知、不确定或任何您的语义)是可以接受的(但如果在插入时将其保留,则会有默认值),但是对于所有现有数据,您将继续为其分配默认值。

      我将不得不认真研究这种情况,并询问为什么您甚至要在未来的记录中允许 NULL - 鉴于没有任何历史记录会有它,并且未来的记录存在默认值。

      【讨论】:

        【解决方案3】:

        我怀疑。

        http://msdn.microsoft.com/en-us/library/ms190273(SQL.90).aspx

        微软推荐的做法如下(取自上面的url)

        UPDATE MyTable SET NullCol = N'some_value' WHERE NullCol IS NULL
        ALTER TABLE MyTable ALTER COLUMN NullCOl NVARCHAR(20) NOT NULL
        

        【讨论】:

          【解决方案4】:

          ALTER TABLE {TABLENAME} ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE} [**WITH VALUES]**

          WITH VALUES 可用于将默认值存储在表中每个现有行的新列中。

          有关 MSDN 链接的更多详细信息。 https://msdn.microsoft.com/en-in/library/ms190273.aspx

          【讨论】:

            猜你喜欢
            • 2016-05-12
            • 2010-09-10
            • 2011-06-20
            • 1970-01-01
            • 2013-05-31
            • 1970-01-01
            • 2014-08-18
            相关资源
            最近更新 更多