SQL Server唯一约束(但有时仅限)

Tim*_*im 7 sql-server database-design

想象一下,我有一个包含3列的表格:

ID(唯一ID)描述(varchar 2000)IsDeleted(boolean)

我想添加一个唯一约束,以便所有描述都是唯一的.但仅限于活动记录,即IsDelete = false.如果用户将记录标记为已删除,则可以重新添加与已删除记录具有相同描述的记录,但不能与活动记录相同.

所以,我只想要约束来影响IsDeleted = false的记录.

蒂姆

Ed *_*per 7

在SQL 2008中,您可以使用带过滤器的唯一索引来执行此操作:

CREATE UNIQUE NONCLUSTERED INDEX ix_table_UNC ON table(Description) WHERE IsDeleted = 0
Run Code Online (Sandbox Code Playgroud)

在SQL 2007之前,您需要在表的视图上创建唯一索引,仅选择未删除的记录:

CREATE VIEW dbo.vw_ActiveDescriptions WITH SCHEMABINDING
AS
SELECT Id, Description
FROM Table
WHERE IsDeleted= 0
GO
CREATE UNIQUE CLUSTERED INDEX ix_vw_ActiveDescriptions_UC ON dbo.vw_ActiveDescriptions(Description);
Run Code Online (Sandbox Code Playgroud)