维护辅助ID列

时间:2009-12-31 14:59:23

标签: database

嘿,我正在寻找维持对象相对自动递增值的最有效方法。换句话说,我有一个对象表和一个子对象表。子对象需要有一个列,该列相对于同一父对象的其他子对象递增。 (即父对象4的子对象3)

例如

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 个答案:

答案 0 :(得分:0)

在父对象表中添加一个字段,指定子子ID的最大数量。在插入时,请确保在事务中执行此操作,以便在阅读max sub-id和修改它之间没有人可以介入。

答案 1 :(得分: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

现在,您可以使用父对象ID限制此值,并仅检索给定父objectid的 MAX ID。然后,您只需在找到的 MAX 中添加1,然后将其用作新的 autonumber

如果您需要更多帮助,或者如果这在您的特定数据库中不起作用,请与我们联系。