SQL Server中是否存在某种机制允许类似Enumerated类型的功能?
例如,如果我有一个名为“UpdateStatus”的列,通常会设置单字母值,如下所示:
这可能等同于很多事情。这导致了混乱。另一种方法是让它成为这样的字符串列:
但这有其自身的问题。最终有人会写这样的东西:where UpdateStatus = 'Initalized'
(拼写错误)。另外,我听说扼杀弦乐并不是那么高效。
那么,是否有任何类型的SQL Server枚举类型可以帮助解决这个问题?基本上我正在寻找编译时检查被比较的值(即“已初始化”)是值列表的一部分。
我正在使用SQL Server 2008。
答案 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.