2013-01-18 131 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 

到表中然後展開主鍵包含的那場。

由於您正在記錄以前版本的記錄,因此您可以簡單地取該記錄的最後一個版本號,然後將其增加一個。