基于值的唯一约束/索引

Oni*_*ght 6 index sql-server-2005 sql-server constraint

我有一个包含以下列定义的表:

ID (INT, PK)
Name (VarChar)
Active (Bit)
Bunch_of (Other_columns)
Run Code Online (Sandbox Code Playgroud)

问:我想有一个约束Name/Active,使得我们只能有1条记录与给定的NameActiveActive= 1),但我们也能有同样的多条记录NameInactiveActive= 0)。这可能吗?

我已经尝试了普通的 Unique 约束,但它们将数据集限制为仅允许 1 条记录的给定NameInactive.

Mar*_*ith 8

要在 2005 年以声明方式强制执行此操作,您可以使用索引视图。

CREATE VIEW dbo.ActiveNames
WITH SCHEMABINDING
AS
SELECT Name
FROM  dbo.YourTable
WHERE Active = 1

GO

CREATE UNIQUE CLUSTERED INDEX UQ_ActiveNames ON dbo.ActiveNames(Name)
Run Code Online (Sandbox Code Playgroud)