-1

テーブル呼び出しテストがあり、4 つのフィールドがあります。レコードを一意にしたいテーブルに複合一意キーを作成しました。以前のバージョンのレコードを追跡し、すべての古いレコードを isdeleted=1 とマークしていますが、問題は、私の一意のキーでは、2 つ以上の 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)

これはFiltered Indexと呼ばれます。ApplicationIDとの組み合わせをIsDeleted一意にApplicationIDする必要はありませんでした。削除されていない場合は、一意にする必要がありました。これらは 2 つのまったく異なる概念です。

于 2013-01-18T07:14:27.003 に答える
0

バージョン番号フィールドを追加してみてください

vNum int

次に、主キーを展開してそのフィールドを含めます。

いずれにせよ、レコードの以前のバージョンを追跡しているため、そのレコードの最後のバージョン番号を取得して、次のバージョンの番号を 1 ずつ増やすことができます。

于 2013-01-18T07:15:08.220 に答える