SQL Server n'a pas de très bonnes fonctions de manipulation de chaînes. C'est plus facile avec les sous-requêtes :
select firstname,
stuff(reverse(stuff(reverse(legalname), 1, len(lastname) + 1, '')),
1, len(firstname) + 1, '')
from (select legalname,
left(legalname, charindex(' ', legalname) - 1) as firstname,
right(legalname, charindex(' ', reverse(legalname)) - 1) as lastname
. . .
) c
Cependant, je serais très prudent, car tout le monde n'a pas de noms en trois parties. Et d'autres ont des suffixes (JR, SR) et d'autres complications.