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

标签 sql sql-server database 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

对于大型表(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/

相关文章:

mysql - 如何获取与 sql 表上的 id 匹配的名称?

mysql - SQL 重命名 NULL

database - 如何转储 django-cms 相关内容以便与正在运行的实例一起迁移?

sql - 如何使用重复的 WHERE 子句和 LEFT JOINS 使查询更动态(无 crostab)

c# - 在单个数据库调用中获取 EF 模型 LINQ 中的多个计数

c# - .Net 应用程序安装 2012 与数据库

c# - c# Windows 服务中的数据库查询 - 执行无提示地失败

utf8_swedish_ci 的 mysql 字符长度

mysql - phpMyAdmin - SQL 查询 LEFT JOIN 问题

php - 使用 SUM 和 Group By 连接 2 个表