2008-11-04 190 views
25

我正在開發一個項目,我想在表格中存儲一些易於枚舉的信息。 MySql的枚舉數據類型正是我想要的:http://dev.mysql.com/doc/refman/5.0/en/enum.html。在SQL Server 2005中是否有相當的功能?SQL Server 2005是否與MySql的ENUM數據類型等效?

我知道我可以將一個可能的值存儲在類型表中,但我寧願不用鏈接它來獲得描述。我們的數據庫標準不允許我們鏈接非整數或uniqueidentifier字段,因此將可能的鍵存儲爲字符也是一樣。

回答

23

這是否適合您?

http://blechie.com/wtilton/archive/2007/08/24/303.aspx

創建表...

MySQL的:

ColumnName ENUM('upload', 'open', 'close', 'delete', 'edit', 'add') 
    DEFAULT 'open' 

SQL服務器:

ColumnName varchar(10) 
    CHECK(ColumnName IN ('upload', 'open', 'close', 'delete', 'edit', 'add')) 
    DEFAULT 'open' 
+0

這對我很有用。還有一個問題:是否有一種簡單的方法可以告訴枚舉的有效值,而不必選擇約束條件?我知道可能沒有,我必須根據這個做出我的決定。 – 2008-11-04 19:33:46

+0

我不確定「選擇」約束是什麼意思,但您可能能夠將此係統查詢的結果包裝爲可滿足您需求的某些內容。 從sys.check_constraints中選擇定義其中[name] ='yourConstraintName' – Nikki9696 2008-11-04 19:39:50

17

一個CHARACT erm的MySQL的ENUM數據類型是,它在每一行中只存儲一個數值索引到值列表中,而不是字符串本身。所以它通常具有更高的存儲效率。同樣,按ENUM列排序時的默認行爲是按數字索引進行排序,因此按照ENUM中的元素順序進行排序。

Nikki9696建議使用帶CHECK約束的VARCHAR列。這滿足了將值限制在某個允許值的簡短列表中,但它不模擬存儲效率或特殊排序順序。

獲取這兩種行爲的一種方法是將該列作爲整數外鍵聲明到查找表中,在該表中存儲每個允許的字符串。

相關問題