次の要件があります。
表1:複合主キーversion, id
------------------------------------
version id col1 coll2 active
------------------------------------
1 123 'A' 'B' 'N'
2 123 'C' 'D' 'Y'
1 124 'E' 'F' 'Y'
table1
これで、特定のの挿入と更新についてid
、次の属性(トリガーによって派生)を使用して新しい行を作成する必要があります。
Version
id
与えられたとのために1ずつインクリメントする必要があります- 最新の行がアクティブになるはずです(
active
列はに設定されていますY
)
例えば
INSERT INTO table1(id, col1, col2) VALUES (123, 'X', 'Y');
------------------------------------
version id col1 coll2 active
------------------------------------
1 123 'A' 'B' 'N'
2 123 'C' 'D' 'N'
3 123 'X' 'Y' 'Y'
1 124 'E' 'F' 'Y'
3行目が作成されます
UPDATE table1 SET col1 = 'F' WHERE id = 124;
------------------------------------
version id col1 coll2 active
------------------------------------
1 123 'A' 'B' 'N'
2 123 'C' 'D' 'N'
3 123 'X' 'Y' 'Y'
1 124 'E' 'F' 'N'
2 124 'F' 'F' 'Y'
最後の行が作成されます
DELETE FROM dbo.table1 WHERE id = 124;
------------------------------------
version id col1 coll2 active
------------------------------------
1 123 'A' 'B' 'N'
2 123 'C' 'D' 'N'
3 123 'X' 'Y' 'Y'
1 124 'E' 'F' 'N'
2 124 'F' 'F' 'N'
ID124のすべての行が非アクティブになります。
これはモデリングの問題のようですが、TABLE1とサポートトリガーを使用してこの機能を提供することが義務付けられています。
必要に応じてテーブルの問題を変更してからselect max(version)
同じテーブルに挿入することはできません。回避策を提案していただけますか?