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

我能想出的最好办法是:

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条记录)来说,这似乎有点低效.

我已经try 了添加带缺省值的列,然后删除缺省约束.但是,我不知道默认约束的名称是什么,我不想访问sysobjects并输入特定于数据库的知识.

拜托,一定有更好的办法.

推荐答案

我首先是ALTER TABLE tbl ADD col INTEGER CONSTRAINT tempname DEFAULT 1,然后删除explicitly named约束(大概是在事务内).

Database相关问答推荐

如何从大型Oracle数据库中删除列?

函数到关系映射比对象到关系更容易吗?

更新数据库后如何更新redis?

android 应用程序与 web 服务通信的安全性

在 MySQL 中创建表时如何定义列的默认值?

使用 LiquiBase 和 Spring 将大量值(使用 FK)插入数据库

如何设计 SaaS 数据库?

MySQL workbench:如何将 mysql 数据库导出到 .sql 文件?

每个请求可以多次查询 MongoDB 吗?

是否应该强制执行参照完整性?

在 SQL 中与 NULL 值连接

用 Python 永久存储字典的优雅方式?

如何在实体-属性-值设计中处理不同的数据类型(例如,具有多列的单个表或每种数据类型的多个表)?

PostgreSQL 哈希索引

何时在关系数据库中使用枚举或小表?

将文本列设为唯一键

MySQL 整数 0 与 NULL

如何使用 group_concat 引用值

您是否应该将自引用表列设为外键?

从 SQLite 导出到 SQL Server