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

时间:2018-05-05 18:14:55

标签: sql sql-server

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

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

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

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

由于

3 个答案:

答案 0 :(得分:4)

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

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');

答案 1 :(得分:2)

ALTER TABLE TRANSACTIONS DROP CONSTRAINT DF__TRANSACTIO__ROLE__48CFD27E;
ALTER TABLE TRANSACTIONS ADD DEFAULT('S') FOR ROLE

答案 2 :(得分:2)

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

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

由于您向我们展示了用于创建约束的代码,因此现有的约束名称可能由SQL Server生成,其中包含GUID名称的一部分。这不是一个好的做法,如上面的代码示例所示,命名约束总是好的。