SQL: BORRAR datos de la tabla de autorreferencia en un orden específico

Tengo una tabla como esta:

groupId guid PK
parentId guid
name
left int
right int

Hay una clave externa de parentId a groupId (esta es una tabla autorreferenciada).

izquierda y derecha son MPTT valores izquierda / derecha para mantener una jerarquía. Lo importante a tener en cuenta aquí es que cuanto mayor es el valor izquierdo, más anidado está un elemento (en otras palabras: para cualquier elemento dado, su valor izquierdo siempre será mayor que el valor izquierdo de todos los padres).

Estoy tratando de escribir una declaración DELETE rápida para eliminar todo menos el grupo superior (que siempre tiene un valor GUID vacío), por ejemplo:

DELETE FROM [group] WHERE [groupId] <> '00000000-0000-0000-0000-000000000000'`

Desafortunadamente esto no funciona, ya que generalmente hay subgrupos debajo de cualquier grupo dado que evitan la eliminación. Si ejecuta esa consulta DELETE una y otra vez, eventualmente eliminará todo, pero obviamente esta no es una buena solución.

Lo que quiero es el equivalente de:

DELETE FROM [group] WHERE [groupId] <> '00000000-0000-0000-0000-000000000000' 
ORDER BY [left] DESC

Por supuesto, esa sintaxis no está permitida, pero efectivamente, primero debe eliminar los elementos con los valores izquierdos más grandes para asegurarse de que no haya grupos a continuación que eviten la eliminación debido a restricciones FK.

También probé:

delete from [group] where groupid in (
  select top 1000000 * from [group] 
  where groupid <> '00000000-0000-0000-0000-000000000000' 
  ORDER BY [left] desc
)

que es una sintaxis válida (solo puede usar ORDER BY si también usa TOP) pero en realidad no hace que DELETE ocurra en el orden de las filas devueltas, por lo que aún no funciona.

¿Es posible hacerlo sin recurrir a un cursor para eliminar filas una por una?

Respuestas a la pregunta(5)

Su respuesta a la pregunta