假设我有以下专栏:
Name | Address| Type
Type在SQL Server中存储为int,对应于C#标志枚举。我想在名称,地址和类型列中声明一个唯一约束,这样对于特定的名称和地址,两个条目没有相同的标志。例如,以下两个条目是合法的:
John | NY | 1
John | NY | 2
但这两个不会(因为两者的第一位都是1):
Jane | NY | 1
Jane | NY | 3
有一种简单的方法可以实现吗?谢谢!
答案 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);
. . .
然后,您可以在计算列上创建唯一索引。