سلام،
برای درج بین دو رکورد مشکلی وجود ندارد. کافیه از Update استفاده بشه. همانطور که خودتون بهش اشاره کردین.
راجب Sort نیاز هست از یک الگوریتم بازگشتی استفاده بشه. که من راحتتر از CTE روشی رو سراغ ندارم. البته این CTE قابل استفاده در نسخه ی 2000 نیست.
declare @t table (ID int, SUBID int)
insert @t values
(0, NULL),
(1, 0),
(2, 1),
(3, 2),
(4, 3),
(5, 4),
(6, 5)
BEGIN TRAN
UPDATE @t
SET SUBID = 7
WHERE SUBID = 3
INSERT INTO @t VALUES (7, 3)
COMMIT TRAN
;WITH CTE AS
(
SELECT ID, SUBID, [Level] = 1
FROM @t
WHERE SUBID IS NULL
UNION ALL
SELECT T.ID, T.SUBID, [Level] + 1
FROM CTE
JOIN @t AS T
ON T.SUBID = CTE.ID
)
SELECT * FROM CTE
ORDER BY [Level];
/*
ID SUBID Level
----------- ----------- -----------
0 NULL 1
1 0 2
2 1 3
3 2 4
7 3 5
4 7 6
5 4 7
6 5 8
(8 row(s) affected)
*/