6

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

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

  1. D
  2. X
  3. ü

这可能等同于很多事情。这会导致混乱。另一种方法是让它成为这样的字符串列:

  1. 已下载
  2. 已删除
  3. 更新
  4. 初始化

但这有它自己的问题。最终有人会写这样的东西:(where UpdateStatus = 'Initalized'拼写错误)。另外,我听说琴弦键控并不是那么高效。

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

我正在使用 SQL Server 2008。

4

3 回答 3

10

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

于 2010-03-03T17:22:53.580 回答
6

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

CREATE TABLE my_table ( 
    UpdateStatus VARCHAR2(11) 
      CHECK( UpdateStatus IN ('Downloaded', 'Deleted', 'Updated', 'Initialized'))
)
于 2012-05-22T02:07:13.530 回答
1

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

请记住,您不能在 UDF 中使用 RAISERROR,因此您必须故意导致错误,并单独记录。

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

这是希望我们尽快得到枚举,我们感觉有点被遗忘了。

于 2012-05-21T05:29:10.093 回答