-1

我有一个表调用测试,有四个字段。我已经在我希望我的记录唯一的表上创建了复合唯一键。我们正在跟踪以前版本的记录并标记所有旧记录 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)
4

2 回答 2

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)

它被称为过滤索引。您不希望 和 的组合ApplicationID是唯一的 -如果它没有被删除,IsDeleted您只是希望它是唯一的。ApplicationID这是两个完全不同的概念。

于 2013-01-18T07:14:27.003 回答
0

尝试添加版本号字段

vNum int

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

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

于 2013-01-18T07:15:08.220 回答