繁体   English   中英

更改SQL Server 2012中现有列的列默认值

[英]Alter the column default value for an existing column in SQL Server 2012

我有一个现有的列( ROLE ),其默认值需要从'zzzz'更新为'S'

我尝试使用以下查询,这显然不起作用:

ALTER TABLE [TRANSACTIONS] ALTER COLUMN [ROLE] ADD DEFAULT('S') ;

有人可以帮助您了解是否甚至可以更新列默认值,如果可以,那么如何?

谢谢

您需要删除并重新添加默认约束以指定其他值。

ALTER TABLE dbo.TRANSACTIONS DROP CONSTRAINT DF_TRANSACTIONS_ROLE;
ALTER TABLE dbo.TRANSACTIONS ADD CONSTRAINT DF_TRANSACTIONS_ROLE DEFAULT ('S') FOR [ROLE];

但是,由于没有显式命名约束(这是最佳实践),因此需要确定DROP语句的现有约束名称:

SELECT name
FROM sys.default_constraints AS dc
WHERE
    dc.parent_object_id = OBJECT_ID(N'dbo.TRANSACTIONS')
    AND dc.parent_column_id = COLUMNPROPERTYEX(dc.parent_object_id, 'ROLE', 'ColumnID');
ALTER TABLE TRANSACTIONS DROP CONSTRAINT DF__TRANSACTIO__ROLE__48CFD27E;
ALTER TABLE TRANSACTIONS ADD DEFAULT('S') FOR ROLE

您需要查找当前默认约束的名称。 假设它名为DefaultConstraintName ,那么您将执行以下查询:

ALTER TABLE TRANSACTIONS DROP CONSTRAINT DefaultConstraintName;
GO
ALTER TABLE TRANSACTIONS ADD CONSTRAINT DF_TRANSACTIONS_ROLE DEFAULT ('S') FOR ROLE;
GO

由于您向我们展示了用于创建约束的代码,因此现有约束名称可能是由SQL Server在其名称中包含GUID的一部分生成的。 这不是一个好习惯,就像上面的代码示例中一样,给您的约束起个名字总是很不错的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM