SQL Server 2008中的枚举类型?

时间:2010-03-03 17:20:07

标签: sql-server tsql sql-server-2008 enumeration enumerated-types

SQL Server中是否存在某种机制允许类似Enumerated类型的功能?

例如,如果我有一个名为“UpdateStatus”的列,通常会设置单字母值,如下所示:

  1. d
  2. X
  3. û
  4. I
  5. 这可能等同于很多事情。这导致了混乱。另一种方法是让它成为这样的字符串列:

    1. 下载
    2. 删除
    3. 更新
    4. 初始化
    5. 但这有其自身的问题。最终有人会写这样的东西:where UpdateStatus = 'Initalized'(拼写错误)。另外,我听说扼杀弦乐并不是那么高效。

      那么,是否有任何类型的SQL Server枚举类型可以帮助解决这个问题?基本上我正在寻找编译时检查被比较的值(即“已初始化”)是值列表的一部分。

      我正在使用SQL Server 2008。

3 个答案:

答案 0 :(得分:10)

为什么不包含包含代码和描述的查找表。为此查找表创建外键将导致仅使用有效代码。

答案 1 :(得分:6)

除了查找表(FK)之外,在简单的情况下,您可以使用检查约束:

CREATE TABLE my_table ( 
    UpdateStatus VARCHAR2(11) 
      CHECK( UpdateStatus IN ('Downloaded', 'Deleted', 'Updated', 'Initialized'))
)

答案 2 :(得分:1)

我看到这一点的唯一方法是使用UDF来评估枚举的字符串表示是否有效。它很慢,很痛苦,通常不值得,但至少你有办法大声失败而不是默默地。

请记住,你不能在UDF中使用RAISERROR,因此你必须导致一个整体错误,并单独记录。

最终,目前,问题的“完美”解决方案是从另一方面接近 - 您可以通过代码优先的ORM实现这种心态,这将允许您在代码中使用本机枚举,并在迁移过程中正确创建相应的SQL查找。

这是希望我们很快得到枚举,we're feeling a little left out.