Оператор 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