我们有以下要求:
表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'
id 124 的所有行都变为非活动状态。
这似乎是建模问题,但我们必须使用 TABLE1 和支持触发器来提供此功能。
我们无法根据需要绕过修改表问题select max(version)
,然后插入到同一个表中,任何人都可以提出解决方法吗?