L'instruction REPLACE sur le corps de l'e-mail T-SQL provoque des valeurs null

J'ai une procédure simple qui envoie un email sur une création d'user. Pour remplir les champs nom d'user et nom complet, je charge le corps de l'e-mail à partir d'une table de configuration, puis en utilisant REMPLACER pour replace les espaces réservés.

SELECT @BodyMessage = ConfigValue , @Email = email FROM dbo.ConfigValues WHERE ConfigName = 'ADNotification' IF @Email = '' SET @Email = @DefaultEmail SET @BodyMessage = REPLACE(@BodyMessage, 'FullName', @FullName) SET @BodyMessage = REPLACE(@BodyMessage, 'UserName', @UserName) Select @BodyMessage SET @SubjectLine = 'User Account Created' EXEC msdb.dbo.sp_send_dbmail @profile_name='EUI', @recipients=@Email, @subject=@SubjectLine, @body_format = 'TEXT', @body= @BodyMessage 

Lorsque cela fonctionne, le @BodyMessage est vide. Si je commente les deux instructions REPLACE, l'email envoie très bien (comme ceci)

 SELECT @BodyMessage = ConfigValue , @Email = email FROM dbo.ConfigValues WHERE ConfigName = 'ADNotification' IF @Email = '' SET @Email = @DefaultEmail --SET @BodyMessage = REPLACE(@BodyMessage, 'FullName', @FullName) --SET @BodyMessage = REPLACE(@BodyMessage, 'UserName', @UserName) Select @BodyMessage SET @SubjectLine = 'User Account Created' EXEC msdb.dbo.sp_send_dbmail @profile_name='EUI', @recipients=@Email, @subject=@SubjectLine, @body_format = 'TEXT', @body= @BodyMessage 

J'ai ajouté récemment l'instruction SELECT @Bodymessage basée sur d'autres commentaires; le code est le même avec ou sans la déclaration. Si je vérifie la table Sent Mail dans la database msdb, le corps est null.

Ce que je cherche à faire, c'est que les instructions de rlocation remplacent correctement les champs. Qu'est-ce que je fais mal?

Presque certainement @FullName ou @UserName IS NULL. Cela provoquera votre fonction REPLACE pour renvoyer NULL. Vérifiez la valeur de ces deux. Alternativement, vous pouvez append un ISNULL dans vos fonctions de rlocation.

Quelque chose comme ça.

 SET @BodyMessage = REPLACE(@BodyMessage, 'FullName', ISNULL(@FullName, '')) SET @BodyMessage = REPLACE(@BodyMessage, 'UserName', ISNULL(@UserName, '')) Select @BodyMessage