你如何改變一列來刪除默認值?如何從表中的列中刪除默認值?
柱用創建:
ALTER table sometable Add somecolumn nchar(1) NOT NULL DEFAULT 'N'
然後用修改:
alter table sometable alter column somecolumn nchar(1) null
允許空值,但默認值保持。你怎麼能刪除它?
你如何改變一列來刪除默認值?如何從表中的列中刪除默認值?
柱用創建:
ALTER table sometable Add somecolumn nchar(1) NOT NULL DEFAULT 'N'
然後用修改:
alter table sometable alter column somecolumn nchar(1) null
允許空值,但默認值保持。你怎麼能刪除它?
它的默認約束,你需要執行:
ALTER TABLE
DROP CONSTRAINT ConstraintName
如果您在創建約束沒有指定名稱,則SQL Server中創建一個給你。您可以使用SQL Server Management Studio通過瀏覽表格,打開其樹節點,然後打開約束節點來查找約束名稱。
如果我沒記錯的話,這個約束將被命名爲DF_SomeStuff_ColumnName。
編輯:Josh W.'s答案包含指向SO question的鏈接,該鏈接顯示如何使用SQL查找自動生成的約束名稱,而不是使用Management Studio界面。
這是我想出了(看到喬希W.答案之前,以及實際上我看到它,但它掠過這麼快我誤會了吧):
declare @name nvarchar(100)
select @name = [name] from sys.objects where type = 'D' and parent_object_id = object_id('sometable')
if (@name is not null)
begin
exec ('alter table [sometable] drop constraint [' + @name +']')
end
的優點我這裏,我知道整個桌子上只有一個這樣的限制。如果有兩個,那麼我想這就是爲什麼你應該命名他們;)。
(的問題是,這是10個不同的客戶數據庫進行了修改,所以沒有放在一個腳本一個一致的名稱)
是的,這將成爲任何大規模數據庫推出的問題。你最終必須做的是強迫自己始終命名你的約束,以便它們在不同的環境中保持一致。 例如:ALTER table sometable添加somecolumn nchar(1)NOT NULL CONSTRAINT DF_TableName_SomeColumn DEFAULT'N' – 2009-09-01 21:43:15
我相信你的解決方案不能在具有多個默認值的表上工作,它將刪除最後一個 – AaA 2014-04-22 01:44:39
如果表有一些約束到不同的列,有必要通過柱名稱過濾: '聲明@name nvarchar的(100) SELECT * FROM sys.objects中ø 加入SYS.COLUMNS山坳上o.object_id = col.default_object_id 其中 類型= 'D'和parent_object_id = object_id('tablename') 和col.name ='columnname'' – MirrorBoy 2017-11-08 15:28:35
select name from sys.default_constraints where name like '%first_3_chars_of_field_name%'
找到你的約束,並使用DROP CONSTRAINT
下降它。或者運行一個遊標/ while循環來刪除數據庫中所有類似的默認值。
它不起作用,因爲我的約束名稱有'DF_tableName_someLetters' – MirrorBoy 2017-11-08 15:26:21
alter table <tablename> drop constraint <constraintname>
如果您不知道約束的名稱,您可以使用sql server manangement studio來檢查約束名....希望這有助於。
如果您使用的是SQL Server Management Studio,這非常簡單。
如果有幾個與表相關的約束,並且您不想全部刪除它們,請右鍵單擊約束並選擇「Script Cnstraint as - > CREATE to - > New Query Editor Window」。這會向您顯示創建約束的代碼,包括列名和默認值。
然後只需右鍵單擊要刪除的約束並選擇刪除。
可能重複[如何在T-SQL中刪除默認值或類似約束?](http://stackoverflow.com/questions/1123060/how-do-you-drop-a-default-value- or-similar-constraint-in-t-sql) – 2013-11-01 10:40:08
VTC有什麼可能嗎? – 2013-11-01 10:51:48
@RubenBartelink,答案是一半的解決方案。如果Mods想要合併,我不介意,但我的回答實際上是如何放棄約束的結果,而不是僅僅發現名稱。 – Yishai 2013-11-01 13:15:07