1

假设在 SQL Server 2008 中有一个包含两列的表:id 和 name。现在假设您要在表中添加一个不可为空的列,称为“description”,并且在添加此列的过程中,您希望将name 中的数据用作description 中的原始批次数据。有没有办法直接做到这一点,即不删除表并重新创建它或在添加后手动填充值或其他什么?如果有办法,怎么做?谢谢!

4

1 回答 1

3

您可以将您所要求的内容作为计算列,但随后您将无法独立修改描述。

您可以做些什么来尽量减少对日志等的影响,将其添加为可为空,然后批量更新值,然后将其更改为不可为空。

ALTER TABLE dbo.foo ADD description VARCHAR(whatever) NULL;

SELECT 1;
BEGIN TRANSACTION;

WHILE @@ROWCOUNT > 0
BEGIN
    COMMIT TRANSACTION;
    BEGIN TRANSACTION;

    UPDATE TOP (1000) dbo.foo 
      SET description = name
      WHERE description IS NULL;
END

ALTER TABLE dbo.foo ALTER COLUMN description VARCHAR(whatever) NOT NULL;

COMMIT TRANSACTION;

或者按照 Dems 的建议,将其添加为不可为空的默认值,然后删除默认约束。

于 2012-09-17T16:04:12.140 回答