SQL Server:实现唯一约束,唯一的约束是可以重复的一个值

Amo*_*ana 2 database sql-server constraints unique-constraint

我有一个Student在组合键上具有唯一性的表[Name, Status]。我可以将特定学生标记为已删除,但稍后可以将其注册。基本上,我可以有多个具有相同名称和Deleted状态的条目。但是,如果我应用唯一约束,那么它将不允许我这样做。

因此,我创建了一个接受名称和状态的新函数。如果状态被删除,则返回true,如果不是已删除,则返回记录数。

内部检查中,我正在检查返回的值是否小于1,然后才允许重新插入。当我调用此函数时,它会显示正确的结果,但CHECK无法施加约束。

记录

ID   Name    Status
-------------------
1    Ram     Deleted
1    Ram     Deleted
2    Sham    Active
2    Sham    Deleted
Run Code Online (Sandbox Code Playgroud)

我可以插入记录

2 Sham Deleted
Run Code Online (Sandbox Code Playgroud)

但这不应该

2 Sham Active
Run Code Online (Sandbox Code Playgroud)

提前致谢

Gor*_*off 9

您正在寻找过滤索引。您希望学生在不删除时是唯一的。

create unique index unq_student_id_active
    on student(name)
    where status = 'Active';
Run Code Online (Sandbox Code Playgroud)

SQL Server中的筛选索引是最近添加的;如果它们不适用于您的版本,请使用您使用的版本标记您的问题。