添加具有初始(但不是默认)值的新列的最佳方法?

Adr*_*ian 26 sql database sql-server alter-table

我需要使用初始值向MS SQL 2005数据库添加新列.但是,我不想在此列上自动创建默认约束.在我添加列的时间点,默认/初始值是正确的,但这可能会随着时间而改变.因此,将来对表的访问必须指定一个值而不是接受默认值.

我能想到的最好的是:

ALTER TABLE tbl ADD col INTEGER NULL
UPDATE tbl SET col = 1
ALTER TABLE tbl ALTER COLUMN col INTEGER NOT NULL
Run Code Online (Sandbox Code Playgroud)

对于较大的表(100,000到1,000,000条记录)来说,这似乎有点低效.

我已尝试使用默认值添加列,然后删除默认约束.但是,我不知道默认约束的名称是什么,而不是访问sysobjects并放入数据库特定的知识.

请,必须有更好的方法.

Ale*_*lli 16

ALTER TABLE tbl ADD col INTEGER CONSTRAINT tempname DEFAULT 1首先,然后删除明确命名的约束(可能在一个事务中).


Sha*_*nce 15

要使用默认值添加列,然后删除默认值,可以将默认值命名为:

ALTER TABLE tbl ADD col INTEGER NOT NULL CONSTRAINT tbl_temp_default DEFAULT 1
ALTER TABLE tbl drop constraint tbl_temp_default
Run Code Online (Sandbox Code Playgroud)

这填充了值1,但没有默认值.使用SQL Server 2008,我运行了这个和你的代码,alter update alter并且没有看到在100,000个小行的表上有任何明显的差异.SSMS不会向我显示alter table语句的查询计划,因此我无法比较两种方法之间使用的资源.