有沒有一種方法可以爲MS SQL Server 2008中的varchar列指定例如4個不同的值?將varchar()列限制爲特定值?
例如,我需要一列稱爲頻率(VARCHAR)只接受「每日」,「每週」,「每月」,「每年」的可能值
這是可能在SQL Server中設置Management Studio在創建表時?
有沒有一種方法可以爲MS SQL Server 2008中的varchar列指定例如4個不同的值?將varchar()列限制爲特定值?
例如,我需要一列稱爲頻率(VARCHAR)只接受「每日」,「每週」,「每月」,「每年」的可能值
這是可能在SQL Server中設置Management Studio在創建表時?
你是否已經着眼於在該列上添加一個check constraint
這將限制值?喜歡的東西:
CREATE TABLE SomeTable
(
Id int NOT NULL,
Frequency varchar(200),
CONSTRAINT chk_Frequency CHECK (Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly'))
)
謝謝 - 這工作很好。我必須做的一個小改變是,「頻率IN ....」也必須包含在括號中。沒有出於某種原因,SQL服務器工作室不喜歡它。 – Adam 2010-03-14 08:25:25
這個約束檢查是否區分大小寫? – RWendi 2013-05-01 09:27:48
我想你錯過了第四行'Frequency varchar(200)' – BillOverFlow 2016-09-29 01:09:32
你想要一個check constraint。
CHECK約束確定的有效值 來自未 基於在另一列中的數據的邏輯表達式。例如,對於 示例, 工資列的值範圍可能受到 的限制,創建CHECK約束, 只允許範圍從 $ 15,000到$ 100,000的數據。這 防止超出正常工資範圍輸入 的工資。
你想要的東西,如:
ALTER TABLE dbo.Table ADD CONSTRAINT CK_Table_Frequency
CHECK (Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly'))
您也可以實現檢查約束與標量函數,如上面的鏈接,這是我喜歡做說明。
這個答案也很好..爲什麼我們不能接受多個! :) – Adam 2010-03-14 08:26:28
是這一個更好:),爲+1 – 2012-12-17 04:40:34
當您正在編輯一個表
右鍵 - >檢查約束 - >添加 - >輸入表達式場像Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly')
和(名稱)領域的良好約束名。
你完成了。
就個人而言,我想它的代碼爲TINYINT和:
原因:
這將需要平均8個字節存儲文本,對於t 1個字節inyint。數百萬行,這將有所作爲。
排序規則如何? 「每日」與「每日」相同嗎?它需要資源來做這種比較。
最後,如果您要添加「雙週」或「每小時」,該怎麼辦?當您只需將新行添加到查找表時,就需要更改架構。
如果可以安全地假設不會有更多有效的值,並且表中會有很多行,我會用比varchar()更小更快的東西來編碼可能的值。 – Wikser 2010-03-14 07:16:53