嘿,我正在寻找维持对象相对自动递增值的最有效方法。换句话说,我有一个对象表和一个子对象表。子对象需要有一个列,该列相对于同一父对象的其他子对象递增。 (即父对象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),然后执行插入操作,但是我想知道如果在同一个父对象上有并发插入的话会导致问题。有没有更好的方法来解决这个问题?
答案 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 。
如果您需要更多帮助,或者如果这在您的特定数据库中不起作用,请与我们联系。