Проблема с вашим исходным кодом здесь:
CHARINDEX(' ',[Name])-1
Если [Имя] не содержит пробела, CharIndex возвращает 0. Вы вычитаете 1 и передаете это в функцию Left. Когда второй параметр слева от функции равен -1, вы получите эту ошибку. На мой взгляд, самый простой способ «исправить» эту проблему - это дать функции CharIndex что-то, что можно найти, например:
CHARINDEX(' ',[Name] + ' ')-1
Теперь ... этот код не может завершиться ошибкой.
Вам НУЖНО сделать это одно место в исходном коде, но вы также должны добавить его в часть LAST_NAME. Если вы этого не сделаете, вы получите неправильные результаты (даже если вы не получите ошибку).
SELECT [Name],
LEFT([Name],CHARINDEX(' ',[Name] + ' ')-1) AS FIRST_NAME,
SUBSTRING([Name],CHARINDEX(' ',[Name] + ' ')+1,LEN([Name])) AS LAST_NAME
FROM Test
Этот запрос вернет те же результаты, что и запрос, предложенный @Sage, но (на мой взгляд) его легче читать и легче понимать.