Оператор REPLACE в теле письма T-SQL приводит к нулевым значениям

У меня есть простая процедура, которая отправляет электронное письмо о создании пользователя. Чтобы заполнить поля username и fullname, я загружаю тело письма из таблицы конфигурации, а затем использую REPLACE для замены заполнителей.

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

Когда это выполняется, @BodyMessage будет пустым. Если я закомментирую два оператора REPLACE, электронное письмо отправляется просто отлично (как это)

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

Недавно я добавил оператор SELECT @Bodymessage на основе некоторых других отзывов; код выполняется одинаково с оператором или без него. Если я проверю таблицу отправленных писем в базе данных msdb, тело будет пустым.

То, что я хочу сделать, это иметь операторы замены правильно заменить поля. Что я делаю неправильно?

1 ответ

Решение

Почти наверняка либо @FullName, либо @UserName IS NULL. Это заставит вашу функцию REPLACE возвращать NULL. Проверьте значение обоих. В качестве альтернативы вы можете добавить ISNULL в ваши функции замены.

Что-то вроде этого.

SET @BodyMessage = REPLACE(@BodyMessage, 'FullName', ISNULL(@FullName, ''))
SET @BodyMessage = REPLACE(@BodyMessage, 'UserName', ISNULL(@UserName, ''))
Select @BodyMessage
Другие вопросы по тегам