Sql server SQL Server 2008中的枚举类型?
SQL Server中是否有某种机制允许枚举类型的功能 例如,如果我有一个名为“UpdateStatus”的列,它通常会使用单字母值进行设置,如下所示:Sql server SQL Server 2008中的枚举类型?,sql-server,tsql,sql-server-2008,enumeration,enumerated-types,Sql Server,Tsql,Sql Server 2008,Enumeration,Enumerated Types,SQL Server中是否有某种机制允许枚举类型的功能 例如,如果我有一个名为“UpdateStatus”的列,它通常会使用单字母值进行设置,如下所示: D X U 我 这相当于很多事情。这导致了混乱。另一种方法是将其设置为如下所示的字符串列: 下载 删除 更新 初始化 但这也有其自身的问题。最终有人会写这样的东西:where UpdateStatus='initialized'(拼写错误)。另外,我听说对字符串进行键控并不是那么有效 那么,是否有任何类型的SQL Server枚举类型可以帮助解
where UpdateStatus='initialized'
(拼写错误)。另外,我听说对字符串进行键控并不是那么有效
那么,是否有任何类型的SQL Server枚举类型可以帮助解决这个问题?基本上,我在寻找编译时检查正在比较的值(即“初始化”)是否是值列表的一部分
我正在使用SQL Server 2008。为什么不使用包含代码和说明的查找表。为此查找表创建外键将导致仅使用有效代码。我看到的唯一方法是使用UDF评估枚举的字符串表示形式是否有效。这很慢,很痛苦,通常不值得,但至少你有办法大声失败而不是默默失败 请记住,您不能在UDF中引发错误,因此您必须引发一个有意引发错误的事件,并单独记录 最终,目前,解决这个问题的“完美”解决方案是从另一方面着手——您可以使用代码优先的ORMs实现这种思路,这将允许您在代码中使用本机枚举,并且相应的SQL查找将在迁移中正确创建 希望我们能尽快得到枚举,除了查找表(FK),在简单的情况下,您可以使用检查约束:
CREATE TABLE my_table (
UpdateStatus VARCHAR2(11)
CHECK( UpdateStatus IN ('Downloaded', 'Deleted', 'Updated', 'Initialized'))
)
@Philip Fourie:我可以这样做,(而且数据库中已经有了这种东西),但是“我正在寻找的是编译时检查一个正在比较的值(即“初始化”)是否是一个值列表的一部分。”这个解决方案提供编译时检查吗?@Vaccano:没有,但它提供了防止数据修改异常的保护。不过,若匹配枚举非常重要,只需设置一个匹配枚举,并在应用程序启动时进行交叉检查。和+1。@Vaccano,抱歉,当我回答时,没有意识到编译时检查是如此重要。很抱歉,我不知道还有比这里提到的更好的方法。没有,除了建议的解决方案(带FK约束的查找表)之外,SQL Server中没有任何类似于“枚举”类型的方法。@marc_s:那太糟糕了。我希望可以使用一些CLR对象来创建枚举类型。