我可以这样添加一列:
ALTER TABLE MyTable
ADD MyColumn BIT NOT NULL
CONSTRAINT MyConstraint
DEFAULT 0
现在,我想根据MyTable
中的其他列设置一个不同的值,而不是常量0
。也就是说,它是在列添加过程中的一次计算。我怎么能那样做?
此外,我不希望我的列具有默认值。
例如,我有另一个名为MyOldColumn
的BIT
列,我只想将其值复制到MyColumn
中。
看起来您只想添加列,然后使用一些计算运行更新。
ALTER TABLE MyTable ADD MyColumn BIT;
UPDATE MyTable
SET MyColumn = SomeCalculation;
ALTER TABLE MyTable ALTER COLUMN MyColumn BIT NOT NULL;
为什么要先将列设置为null
,然后再设置为not null
?因为它会更具表演性。首先将其设置为null
意味着这是一个仅限元数据的操作,不会更改数据页。最后的ALTER
也不会更改任何页面(尽管它会读取所有页面(,因为它们都不是空的。
而如果您先将其设置为not null
,则所有页面都会更改,然后再次更改。