Komplexere AD distinguishedName Parsing

Also habe ich AD distinguishedName Strings wie die folgenden (was ist der Wert von acad.ADCn):

CN=Surname\, Firstname (something),OU=Subdepartment,OU=Department,OU=Fixed,OU=Fixed,DC=Fixed,DC=Fixed,DC=Fixed 

Die "festen" Werte sind irrelevant und immer gleich, auch immer ist die gleiche Anzahl von Elementen von rechts. Die Abteilung und die Abteilung der Abteilungen sind das Wichtige hier (und ihre Namen können alles sein ).

Ich schrieb den folgenden Code, um die Subdepartment zu lesen und als S.<Subdepartmentname> :

 SELECT acad.ADCn , 'S.' + ( SELECT RTRIM(LTRIM(REPLACE(REPLACE(REPLACE(value, 'CN=', ''), 'DC=', ''), 'OU=', ''))) FROM ( SELECT ROW_NUMBER() OVER (ORDER BY (SELECT '')) AS rowid, value FROM STRING_SPLIT(acad.ADCn, ',') ORDER BY rowid DESC OFFSET 6 ROW FETCH FIRST 1 ROW ONLY ) AS splittable ) AS Subdepartment , acad.AccountName , acb.MailAddress FROM MyDB.dbo.AccountAD AS acad LEFT JOIN MyDB.dbo.AddressCB AS acb ON acad.ID = acb.ID 

Das funktioniert gut, wenn (und nur wenn) die Unterabteilung das 7. Element von rechts ist. Aber das ist nicht immer so. Es gibt auch den Fall, dass einige Benutzer nur innerhalb einer Abteilung und nicht innerhalb einer Subdepartment sind, was bedeutet, dass ein Element fehlt. In diesem Fall sollte die Abfrage D.<Departmentname> statt S.<Subdepartmentname> . Und da dies ein anderes Niveau der Nesting ist (du musst das 6. Element von rechts neben dem 7. wählen) finde ich es schwer, den Code zu erweitern, um das zu tun.

Jede Hilfe wäre sehr dankbar.

Wenn es noch nicht klar war, hier sind noch zwei weitere Beispiele:

 CN=Surname\, Firstname (something),OU=Coolsubdepartmentname,OU=Departmentname,OU=Fixed,OU=Fixed,DC=Fixed,DC=Fixed,DC=Fixed 

Sollte zurückkehren: S.Coolsubdepartmentname

 CN=Surname\, Firstname (something),OU=Onlydepartmentname,OU=Fixed,OU=Fixed,DC=Fixed,DC=Fixed,DC=Fixed 

Sollte zurückkehren: D.Onlydepartmentname

Auch kann es ein zusätzliches Komma innerhalb des CN= nach links geben, weshalb ich immer von der rechten Seite gezählt habe, wo die Anzahl der Elemente fixiert ist.

Und das Ganze sollte noch in der Unterabfrage des äußeren SELECT sein (wie im Beispielcode), da ich auch die anderen Werte (AccountName und MailAddress) von woanders auswählen muss.