我們有以下要求變異表的問題複合主鍵version, id
當TRIGGER需要選擇在同一個表中插入行
------------------------------------
version id col1 coll2 active
------------------------------------
1 123 'A' 'B' 'N'
2 123 'C' 'D' 'Y'
1 124 'E' 'F' 'Y'
現在對於任何插入和更新上table1
一個給定的id
,應創建一個新行,並具有以下屬性(由觸發器派生):
Version
應由1給出id
和- 最當前行應成爲活性被遞增(
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'
第三行是爲變爲無效ID 124創建
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'
所有行。
這似乎是一個建模問題,但我們被授權使用TABLE1和支持觸發器來提供此功能。
我們無法繞過修改表問題,因爲我們需要select max(version)
然後插入到同一張表中,任何人都可以請建議一種解決方法嗎?
的變異表的問題是隻在這裏需要解決的兩個問題之一。另一個問題是,應該怎樣解決方案處理大約在同一時間更新表會。每次會議將不會看到其他會話未提交的修改,使之不以某種方式推出系列化任何基於觸發器的解決方案可能會是錯的。 –