Skip to content

Instantly share code, notes, and snippets.

@darylteo
Created March 6, 2014 07:01
Show Gist options
  • Save darylteo/9383900 to your computer and use it in GitHub Desktop.
Save darylteo/9383900 to your computer and use it in GitHub Desktop.
Rebuild Umbraco's level/node structure after modifying parentids. Needs a better recursive union. This example only works with content types specifically.
WITH CT AS (
SELECT *
FROM umbracoNode
WHERE (nodeObjectType = 'A2CB7800-F571-4787-9638-BC48539A0EFB')
),
L1 AS (
SELECT *, 1 'NewLevel', CAST(parentID as varchar) + ',' + CAST(id as varchar) 'NewPath'
FROM CT
WHERE parentID = -1
), L2 AS (
SELECT CT.*, 2 'NewLevel', CAST(L1.NewPath as varchar) + ',' + CAST(CT.id as varchar) 'NewPath'
FROM CT JOIN L1
ON CT.parentID = L1.id
), L3 AS (
SELECT CT.*, 3 'NewLevel', CAST(L2.NewPath as varchar) + ',' + CAST(CT.id as varchar) 'NewPath'
FROM CT JOIN L2
ON CT.parentID = L2.id
), L4 AS (
SELECT CT.*, 4 'NewLevel', CAST(L3.NewPath as varchar) + ',' + CAST(CT.id as varchar) 'NewPath'
FROM CT JOIN L3
ON CT.parentID = L3.id
), A as (
SELECT *
FROM L1
UNION
SELECT *
FROM L2
UNION
SELECT *
FROM L3
UNION
SELECT *
FROM L4
)
MERGE INTO umbracoNode U
USING A
ON A.id = U.id
WHEN MATCHED THEN
UPDATE
SET U.level = A.newlevel,
U.path = A.newpath;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment