2013-01-18 130 views
-1

我有一个表呼叫测试,并有四个字段。我已在桌面上创建了复合键唯一键,我希望我的记录具有唯一性。我们正在与两个跟踪记录的早期版本和标志认证的所有请将isDeleted = 1的旧记录,但问题是,我的唯一密钥不会允许我相同的记录或以上请将isDeleted = 1SQL Server 2008唯一密钥约束

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) 
+1

它看起来像你插入一个重复的值。当然它按预期工作? –

回答

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是唯一的。这是两个完全不同的概念。

0

尝试增加一个版本号字段

vNum int 

到表中然后展开主键包含的那场。

由于您正在记录以前版本的记录,因此您可以简单地取该记录的最后一个版本号,然后将其增加一个。