2009-09-16 95 views

回答

110

它沒有。有一個模糊等價:

mycol VARCHAR(10) NOT NULL CHECK (mycol IN('Useful', 'Useless', 'Unknown')) 
+1

如何做到這一點的SSMS? – EgoPingvina 2017-10-03 19:49:15

+0

@EgoPingvina:你應該在一個問題中提出這個問題,而不是評論。 – chaos 2017-10-18 19:51:38

2
CREATE FUNCTION ActionState_Preassigned() 
RETURNS tinyint 
AS 
BEGIN 
    RETURN 0 
END 

GO 

CREATE FUNCTION ActionState_Unassigned() 
RETURNS tinyint 
AS 
BEGIN 
    RETURN 1 
END 

-- etc... 

表現在哪裏的問題,仍然使用硬值。

68

我在此找到的最佳解決方案是創建一個查找表,將可能的值作爲主鍵創建,併爲查找表創建一個外鍵。

+7

從可維護性角度來看,比上面顯示的檢查約束更好的解決方案。 – HLGEM 2012-06-21 13:59:40

+14

這是一個比Enums更好的解決方案 - 在MySQL中也是如此。 – 2012-06-28 09:29:51

+2

@ypercube爲什麼它對MySQL更好呢? – BenR 2014-11-17 18:52:26

1

當我想在SQL Server中實現枚舉時找到了這個有趣的方法。

考慮到所有的數據庫枚舉需求都可以用2箇中心表來滿足,下面鏈接中提到的方法非常有吸引力。

http://blog.sqlauthority.com/2010/03/22/sql-server-enumerations-in-relational-database-best-practice/

+6

這是一種反模式的變體,被稱爲「one true (查找表」。正確的做法是爲每個枚舉類型使用單獨的表並使用外鍵(如果您需要查找,可能不是「純」枚舉的情況)。 – 2014-09-04 13:22:41

+2

鏈接頁面上的註釋爲每個「枚舉」使用單獨的表格提供了很好的備份,而不是這個答案指定的內容 – 2015-04-13 20:14:06

+4

大多數人會很肯定地忽略這種設計是非常有趣的,但作者將他的文章命名爲「最佳實踐」 。 – 2016-11-16 13:11:17