En supposant par « espaces supplémentaires », vous voulez dire des espaces supplémentaires insérés au cours de la concaténation (ce qui est une hypothèse raisonnable, je pense que si vous avez des espaces supplémentaires dans vos données, vous devez nettoyer.):
ISNULL(FirstName + ' ', '') + ISNULL(MiddleName + ' ', '') + ISNULL(LastName, '')
fonctionne, car vous ajouterez un espace au nom - qui, s'il est NULL, donne NULL - ce qui donne une chaîne vide.
Edit: Si vous ne comptez pas l'option SET - qui peut être une option de connexion ou db:
SET CONCAT_NULL_YIELDS_NULL OFF
LTRIM(FirstName + ' ' + NULLIF(MiddleName + ' ', ' ') + LastName)
est un tout petit peu plus court, mais un peu grand plus laid.
Edit2: Depuis que vous avez accepté la réponse UDF - OMI, qui est un peu un tricheur - est ici un peu dans la même veine:
SELECT a FROM b
b est une vue. ;) Ou. une procédure stockée,
EXEC c
Mais, depuis EXEC est facultative:
c
Je pense que la question devrait préciser * en ligne * SQL. Sinon, vous pouvez simplement faire un proc de caractère, comme l'une des réponses mentionnées. – ThinkingStiff