2009-12-31 40 views
0

嘿,我正在尋找最有效的方法來保持對象相對自動遞增值。換句話說,我有一個對象表和一個子對象表。子對象需要有一列,相對於同一父對象的其他子對象遞增。 (即父對象4的子對象3)維護一個輔助的相對ID列

例如,

Parent Objects: 
ID|name 
1|Object1 
2|Object2 
3|Object3 

Child Objects: 
ID|relativeID|parentObjectID|name 
1|1|1|Some Child Object 
2|1|2|Some Child Object 
3|2|1|Some Child Object 
4|2|2|Some Child Object 
4|3|1|Some Child Object 

什麼是生成relativeID列的最有效方法?我想我應該查詢具有相同的parentObjectID的MAX(relativeID),然後做一個插入,但我想知道如果這會導致問題,如果在同一個父對象上併發插入。有沒有更好的方法來解決這個問題?

+2

您使用的數據庫是? – 2009-12-31 15:07:01

回答

0

將字段添加到父對象表中,指定子子標識的最大數量。在插入時,一定要在交易中完成,這樣在讀取最大子ID和修改它之間沒有人能夠進入。

+0

我認爲你把「交易」和「鎖定」混爲一談。 – 2009-12-31 15:04:27

+0

資源管理器不會自動鎖定事務期間觸摸的資源嗎?這是交易行爲的一部分(交易鎖定)。 – 2009-12-31 15:05:14

+0

它可能,它可能不會。 – 2009-12-31 15:32:55

0

您錯過了說明您正在使用的數據庫。

你可以嘗試什麼是檢索每個父對象的MAX相對ID和使用,在一個交易

這會給你每父對象MAX ID

DECLARE @Table TABLE(
     ID INT, 
     ID_RELATIVE INT, 
     PARENT_OBJECT_ID INT 
) 

INSERT INTO @Table SELECT 1,1, 1 
INSERT INTO @Table SELECT 2,1, 2 
INSERT INTO @Table SELECT 3,2, 1 
INSERT INTO @Table SELECT 4,2, 2 
INSERT INTO @Table SELECT 4,3, 1 

SELECT MAX(ID_RELATIVE) LAST_ID_RELATIVE, 
     PARENT_OBJECT_ID 
FROM @Table 
GROUP BY PARENT_OBJECT_ID 

現在,您可以使用父對象標識來限制此標識,並且僅檢索給定父對象的標識爲MAX。然後你可以加1到MAX找到並使用它作爲新的自動編號

如果您需要更多幫助,或者如果這不適用於您的特定數據庫,請讓我知道。