【问题标题】:SQL Server Unique constraint for C# flag enumsC# 标志枚举的 SQL Server 唯一约束
【发布时间】:2016-11-29 02:44:21
【问题描述】:

假设我有以下列:

Name | Address| Type

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

John | NY | 1  
John | NY | 2 

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

Jane | NY | 1  
Jane | NY | 3 

有没有一种简单的方法来实现这一点?谢谢!

【问题讨论】:

  • 您可以在 SQL Server 中创建唯一约束并在类级别创建模型验证逻辑

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


【解决方案1】:

你的方法是错误的。

不要将标志填充到整数列中!如果你真的想要,你可以将它们存储为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);
. . .

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 1970-01-01
    • 2011-02-17
    相关资源
    最近更新 更多