2016-03-30 59 views
4

缺省列值設置參數,使用SQL Server 2012的SQL - 在表

我有一個使用下面的腳本創建我的成員表中的列:

[EnableMemberWebAccess] [bit] NOT NULL DEFAULT ((1)) 

我希望此列如果同一表中的另一列是特定值,則只有1作爲默認值。我們稱之爲MemDesc列,並且當MemDesc ='Founder'時,EnableMemberWebAccess默認爲1,MemDesc!='Founder'時默認爲0。

任何幫助非常感謝!

+0

它看起來像你需要寫一個觸發器:http://stackoverflow.com/questions/1744455/using-udf-for-default-value-of -a-column,http://stackoverflow.com/questions/30402167/use-a-udf-as-the-default-value-in-a-table-column-in-sql-server –

回答

1

可能沒有辦法實現可以在以後更改的默認值。要麼你有一個在開始時插入的值。然後您需要注意應用程序內的一致性:

ALTER TABLE *table* ADD COLUMN EnableMemberWebAccess bit NULL 

UPDATE *table* SET *table.*EnableMemberWebAccess = CAST(CASE WHEN *table*.MemDesc = 'Founder' THEN 1 ELSE 0 END AS bit) 

ALTER TABLE *table* ALTER COLUMN EnableMemberAccess bit NOT NULL 

或者您必須使用計算列。這將不允許您更改列的值,除非更改所依賴的列的值。

+1

這將是一個時間更新,而問題則談到列的默認值。這將如何迎合更新後插入的新記錄? – AKS

+0

更新之後,除了失敗之外,它不會執行任何操作。我認爲沒有辦法去做這個問題。至少我不知道任何方式。提供列的一致性應該在應用程序級而不是數據庫上完成。如果該值始終相同,則需要計算列。 – timcbaoth

+0

它可以使用計算列完成。 – AKS

-1

計算列應該爲你工作:
ADD EnableMemberWebAccess AS cast((CASE WHEN MemDesc='Founder' THEN 1 ELSE 0 END) as bit)