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