t添加一列,该列的值是从SQL中的其他列计算得出的,而不使用默认值



我可以这样添加一列:

ALTER TABLE MyTable 
ADD MyColumn BIT NOT NULL
CONSTRAINT MyConstraint
DEFAULT 0

现在,我想根据MyTable中的其他列设置一个不同的值,而不是常量0。也就是说,它是在列添加过程中的一次计算。我怎么能那样做?

此外,我不希望我的列具有默认值。

例如,我有另一个名为MyOldColumnBIT列,我只想将其值复制到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,则所有页面都会更改,然后再次更改。

最新更新