我有一个现有的专栏(ROLE
),其默认值需要从' zzzz' 更新为' S'
我尝试使用以下查询,这显然不起作用:
ALTER TABLE [TRANSACTIONS] ALTER COLUMN [ROLE] ADD DEFAULT('S') ;
有人可以帮助了解是否有可能更新列默认值,如果是,那么如何?
由于
答案 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名称的一部分。这不是一个好的做法,如上面的代码示例所示,命名约束总是好的。