Предполагая, что под "дополнительными пробелами" вы подразумеваете дополнительные пробелы, вставленные во время объединения (я думаю, что это разумное предположение. Если у вас есть лишние пробелы в ваших данных, вы должны очистить их):
ISNULL(FirstName + ' ', '') + ISNULL(MiddleName + ' ', '') + ISNULL(LastName, '')
работает, так как вы добавите к имени пробел - который, если он равен NULL, даст NULL - что приведет к пустой строке.
Редактировать: Если вы не учитываете ОПЦИЮ УСТАНОВКИ - это может быть опция соединения или дБ:
SET CONCAT_NULL_YIELDS_NULL OFF
LTRIM(FirstName + ' ' + NULLIF(MiddleName + ' ', ' ') + LastName)
немного короче, но немного страшнее.
Edit2: Поскольку вы приняли ответ UDF - IMO, это немного обманывает - вот некоторые в том же духе:
SELECT a FROM b
б - это вид. ;) Или же. сохраненный процесс,
EXEC c
Но, поскольку EXEC является необязательным:
c