SQL Server 2012中如何修改现有列的默认值?
修改SQL Server列默认值的正确方法
当然可以修改列的默认值!你之前的语句没成功,是因为默认值在SQL Server里是作为约束对象存在的,不能直接通过ALTER COLUMN来修改,得先删掉旧的默认约束,再添加新的。
下面是具体步骤:
1. 找到旧的默认约束名称
SQL Server会自动为默认约束生成一个类似DF__TRANSACT__ROLE__XXXXXX的随机名称,你可以通过系统视图查询到它:
SELECT name FROM sys.default_constraints WHERE parent_object_id = OBJECT_ID('TRANSACTIONS') AND parent_column_id = (SELECT column_id FROM sys.columns WHERE object_id = OBJECT_ID('TRANSACTIONS') AND name = 'ROLE');
2. 删除旧的默认约束
把上一步查到的约束名称替换到下面的语句里:
ALTER TABLE [TRANSACTIONS] DROP CONSTRAINT [旧约束名称];
比如查到的约束名是DF__TRANSACT__ROLE__12345678,就写:
ALTER TABLE [TRANSACTIONS] DROP CONSTRAINT DF__TRANSACT__ROLE__12345678;
3. 添加新的默认约束
这次建议给约束起个有意义的名字,方便以后维护:
ALTER TABLE [TRANSACTIONS] ADD CONSTRAINT DF_TRANSACTIONS_ROLE_DEFAULT_S DEFAULT ('S') FOR [ROLE];
注意事项
- 这个修改只会影响之后新插入的行,已经存在的行不会自动把
ROLE列的值改成'S'。如果需要更新现有数据,可以执行:UPDATE [TRANSACTIONS] SET [ROLE] = 'S' WHERE [ROLE] = 'zzzz';
内容的提问来源于stack exchange,提问作者Newbie
相关产品推荐
相关产品推荐

