簡體   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