C#标志枚举

时间:2016-11-29 02:44:22

标签: c# sql-server enums unique-constraint

假设我有以下专栏:

Name | Address| Type

Type在SQL Server中存储为int,对应于C#标志枚举。我想在名称,地址和类型列中声明一个唯一约束,这样对于特定的名称和地址,两个条目没有相同的标志。例如,以下两个条目是合法的:

John | NY | 1  
John | NY | 2 

但这两个不会(因为两者的第一位都是1):

Jane | NY | 1  
Jane | NY | 3 

有一种简单的方法可以实现吗?谢谢!

1 个答案:

答案 0 :(得分:0)

你正在以错误的方式接近这一点。

不要将标志填入整数列!如果您真的想要,可以将它们存储为bit,但tinyint通常很好:

Type1 bit,
Type2 bit,
. . .

然后创建唯一索引:

 create unique index t_name_address_type1 on t(name, address, type1);
 create unique index t_name_address_type2 on t(name, address, type2);
 . . . 

如果由于某种原因, 在整数列中存储多个值,那么您可以使用计算列创建单独的标志列:

alter table t add type1 as (case when intcol & 1 > 0 then 1 else 0 end);
alter table t add type2 as (case when intcol & 2 > 0 then 1 else 0 end);
. . .

然后,您可以在计算列上创建唯一索引。