要将NOT NULL列添加到具有许多记录的表中,需要应用DEFAULT约束.如果表非常大,则此约束会导致整个ALTER TABLE命令运行很长时间.这是因为:
假设:
可能的解决方案:
问题:
DHo*_*out 59
我也为我的工作遇到了这个问题.我的解决方案是#2.
这是我的步骤(我正在使用SQL Server 2005):
1)使用默认值将列添加到表中:
ALTER TABLE MyTable ADD MyColumn varchar(40) DEFAULT('')
Run Code Online (Sandbox Code Playgroud)
2)NOT NULL使用NOCHECK选项添加约束.该NOCHECK不会对现有值执行:
ALTER TABLE MyTable WITH NOCHECK
ADD CONSTRAINT MyColumn_NOTNULL CHECK (MyColumn IS NOT NULL)
Run Code Online (Sandbox Code Playgroud)
3)在表格中逐步更新值:
GO
UPDATE TOP(3000) MyTable SET MyColumn = '' WHERE MyColumn IS NULL
GO 1000
Run Code Online (Sandbox Code Playgroud)
update语句仅更新最多3000条记录.这允许当时保存一大块数据.我必须使用"MyColumn IS NULL",因为我的表没有序列主键.
GO 1000将执行前一个语句1000次.这将更新300万条记录,如果您需要更多,只需增加此数字.它将继续执行,直到SQL Server返回UPDATE语句的0条记录.
| 归档时间: |
|
| 查看次数: |
49479 次 |
| 最近记录: |