1

我有一个简单的程序,可以在创建用户时发送电子邮件。为了填充用户名和全名字段,我从配置表加载电子邮件正文,然后使用 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 数据库中的已发送邮件表,则正文为空。

我要做的是让替换语句正确替换字段。我究竟做错了什么?

4

1 回答 1

3

几乎可以肯定@FullName 或@UserName 为NULL。这将导致您的 REPLACE 函数返回 NULL。检查这两个的值。或者,您可以在替换函数中添加 ISNULL。

像这样的东西。

SET @BodyMessage = REPLACE(@BodyMessage, 'FullName', ISNULL(@FullName, ''))
SET @BodyMessage = REPLACE(@BodyMessage, 'UserName', ISNULL(@UserName, ''))
Select @BodyMessage
于 2014-07-07T20:30:26.267 回答