SQL Server 2008唯一键约束

时间:2013-01-18 07:08:34

标签: sql-server-2008 key unique unique-constraint

我有一个表调用测试,有四个字段。我在表上创建了composit唯一键,我希望我的记录是唯一的。我们正在跟踪以前版本的记录并标记所有旧记录isdeleted = 1,但问题是,我的唯一密钥不会允许我有两个或更多的相同记录isdeleted = 1

Create table test (ApplicationID int,IsDeleted bit
                  CONSTRAINT test_uck UNIQUE (ApplicationID,IsDeleted)                
                  )
go
insert into test values(1,0)
insert into test values(1,1)
insert into test values(1,1)

2 个答案:

答案 0 :(得分:1)

这就是你想要的:

Create table test (
    ApplicationID int not null,
    IsDeleted bit not null
)
create unique index IX_UniqueApplications on test (ApplicationID)
     where IsDeleted=0
go
insert into test values(1,0)
insert into test values(1,1)
insert into test values(1,1)

它被称为Filtered Index。您不希望ApplicationIDIsDeleted的组合是唯一的 - 如果没有删除,您只希望ApplicationID是唯一的。这是两个完全不同的概念。

答案 1 :(得分:0)

尝试添加版本号字段

vNum int

到您的表格然后展开您的主键以包含该字段。

由于您无论如何都要跟踪记录的先前版本,因此您可以简单地获取该记录的最后一个版本号,然后将其增加一个。