Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- FOREACH Recursive SQL Statement
- Select all Id's where the parent Id is null (All root entries)
- Foreach (Id)
- GenerateControlNum(Id, CurrentCounterValue, CurrentCounterValue)
- GenerateControlNum(Id, CurrentCounterValue, ParentCounterValue)
- Set Id's ControlNum to CurrentCounterValue
- Set Id's ParentControlNum to CurrentCounterValue
- Increment CurrentCounterValue
- Select All Id's where ParentId == Id (All my direct children)
- Foreach (ChildId)
- GenerateControlNum(ChildId, CurrentCounterValue, Id's ControlNum);
- ID ParentId ControlNum ParentControlNum
- 8C821027-A6F9-E011-AB48-B499BAE13A62 756F981E-A6F9-E011-AB48-B499BAE13A62 0 NULL
- D7DB6033-A6F9-E011-AB48-B499BAE13A62 756F981E-A6F9-E011-AB48-B499BAE13A62 0 NULL
- D2E36033-A6F9-E011-AB48-B499BAE13A62 C9E36033-A6F9-E011-AB48-B499BAE13A62 0 NULL
- 8FE66033-A6F9-E011-AB48-B499BAE13A62 58E66033-A6F9-E011-AB48-B499BAE13A62 0 NULL
- 37EC6033-A6F9-E011-AB48-B499BAE13A62 2FEC6033-A6F9-E011-AB48-B499BAE13A62 0 NULL
- 41EC6033-A6F9-E011-AB48-B499BAE13A62 2FEC6033-A6F9-E011-AB48-B499BAE13A62 0 NULL
- DDED6033-A6F9-E011-AB48-B499BAE13A62 BCED6033-A6F9-E011-AB48-B499BAE13A62 0 NULL
- DC69981E-A6F9-E011-AB48-B499BAE13A62 NULL 0 NULL
- 166A981E-A6F9-E011-AB48-B499BAE13A62 NULL 0 NULL
- 4D6A981E-A6F9-E011-AB48-B499BAE13A62 NULL 0 NULL
- 856A981E-A6F9-E011-AB48-B499BAE13A62 NULL 0 NULL
- F56A981E-A6F9-E011-AB48-B499BAE13A62 NULL 0 NULL
- 2E6B981E-A6F9-E011-AB48-B499BAE13A62 NULL 0 NULL
- 666B981E-A6F9-E011-AB48-B499BAE13A62 NULL 0 NULL
- 9D6B981E-A6F9-E011-AB48-B499BAE13A62 NULL 0 NULL
- ID ParentId ControlNum ParentControlNum
- 8C821027-A6F9-E011-AB48-B499BAE13A62 756F981E-A6F9-E011-AB48-B499BAE13A62 22 21
- D7DB6033-A6F9-E011-AB48-B499BAE13A62 756F981E-A6F9-E011-AB48-B499BAE13A62 24 21
- D2E36033-A6F9-E011-AB48-B499BAE13A62 C9E36033-A6F9-E011-AB48-B499BAE13A62 58 57
- 8FE66033-A6F9-E011-AB48-B499BAE13A62 58E66033-A6F9-E011-AB48-B499BAE13A62 69 68
- 37EC6033-A6F9-E011-AB48-B499BAE13A62 2FEC6033-A6F9-E011-AB48-B499BAE13A62 86 85
- 41EC6033-A6F9-E011-AB48-B499BAE13A62 2FEC6033-A6F9-E011-AB48-B499BAE13A62 88 85
- DDED6033-A6F9-E011-AB48-B499BAE13A62 BCED6033-A6F9-E011-AB48-B499BAE13A62 95 94
- DC69981E-A6F9-E011-AB48-B499BAE13A62 NULL 0 0
- 166A981E-A6F9-E011-AB48-B499BAE13A62 NULL 1 1
- 4D6A981E-A6F9-E011-AB48-B499BAE13A62 NULL 2 2
- 856A981E-A6F9-E011-AB48-B499BAE13A62 NULL 3 3
- F56A981E-A6F9-E011-AB48-B499BAE13A62 NULL 4 4
- 2E6B981E-A6F9-E011-AB48-B499BAE13A62 NULL 5 5
- 666B981E-A6F9-E011-AB48-B499BAE13A62 NULL 6 6
- 9D6B981E-A6F9-E011-AB48-B499BAE13A62 NULL 7 7
- 1
- 4
- 7
- 8
- 5
- 2
- 6
- 3
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- ;with C as
- (
- select ID,
- ParentID,
- ControlNum,
- ParentControlNum,
- row_number() over(order by ParentID, ID) - 1 as rn
- from YourTable
- )
- update C1
- set ControlNum = C1.rn,
- ParentControlNum = case when C1.ParentID is null
- then C1.rn
- else C2.rn
- end
- from C as C1
- left outer join C as C2
- on C1.ParentID = C2.ID
- ;with R as
- (
- select ID,
- ParentID,
- cast(ID as varchar(max)) as Sort
- from YourTable
- where ParentID is null
- union all
- select T.ID,
- T.ParentID,
- R.Sort+cast(T.ID as varchar(max))
- from YourTable as T
- inner join R
- on R.ID = T.ParentID
- ),
- C as
- (
- select ID,
- ParentID,
- row_number() over(order by Sort) - 1 as rn
- from R
- )
- update T
- set ControlNum = C1.rn,
- ParentControlNum = case when C1.ParentID is null
- then C1.rn
- else C2.rn
- end
- from YourTable as T
- inner join C as C1
- on T.ID = C1.ID
- left outer join C as C2
- on T.ParentID = C2.ID
Add Comment
Please, Sign In to add comment