我需要使用初始值向 MS SQL 2005 数据库添加一个新列。但是,我不想在此列上自动创建默认约束。在我添加列的时间点,默认/初始值是正确的,但这可能会随着时间的推移而改变。因此,以后对该表的访问必须指定一个值而不是接受默认值。
我能想到的最好的是:
ALTER TABLE tbl ADD col INTEGER NULL
UPDATE tbl SET col = 1
ALTER TABLE tbl ALTER COLUMN col INTEGER NOT NULL
对于大型表(100,000 到 1,000,000 条记录),这似乎有点低效。
我尝试过添加具有默认约束的列,然后删除默认约束。但是,我不知道默认约束的名称是什么,并且宁愿不访问 sysobjects 并输入数据库特定知识。
拜托,必须有更好的方法。
最佳答案
要添加具有默认值的列然后删除默认值,您可以命名默认值:
ALTER TABLE tbl ADD col INTEGER NOT NULL CONSTRAINT tbl_temp_default DEFAULT 1
ALTER TABLE tbl drop constraint tbl_temp_default
这填充了值 1,但表没有默认值。使用 SQL Server 2008,我运行了此代码和您的 alter update alter
代码,但在包含 100,000 个小行的表上没有发现任何明显差异。 SSMS 不会向我显示 alter table 语句的查询计划,因此我无法比较这两种方法之间使用的资源。
关于sql - 添加具有初始(但不是默认)值的新列的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1042260/