Sql server T-SQL电子邮件正文上的REPLACE语句导致空值
我有一个简单的程序,在用户创建时发送电子邮件。为了填充用户名和全名字段,我从配置表加载电子邮件正文,然后使用替换来替换占位符Sql server T-SQL电子邮件正文上的REPLACE语句导致空值,sql-server,tsql,sqlmail,Sql Server,Tsql,Sqlmail,我有一个简单的程序,在用户创建时发送电子邮件。为了填充用户名和全名字段,我从配置表加载电子邮件正文,然后使用替换来替换占位符 SELECT @BodyMessage = ConfigValue , @Email = email FROM dbo.ConfigValues WHERE ConfigName = 'ADNotification' IF @Email = '' SET @Email = @DefaultEmail SET @BodyMessage = REPLACE(@Body
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语句;代码在有或没有语句的情况下运行相同的代码。如果我检查msdb数据库中的sentmail表,则主体为null
我要做的是让replace语句正确地替换字段。我做错了什么?几乎可以肯定@FullName或@UserName都是空的。这将导致REPLACE函数返回NULL。检查这两个值。或者,您可以在replace函数中添加一个ISNULL 像这样的
SET @BodyMessage = REPLACE(@BodyMessage, 'FullName', ISNULL(@FullName, ''))
SET @BodyMessage = REPLACE(@BodyMessage, 'UserName', ISNULL(@UserName, ''))
Select @BodyMessage
您在哪里定义
@FullName
/@UserName
?如果它们为空,则在替换后,生成的@BodyMessage
将为空。参数'@FullName'和'@Email'在哪里设置?就是这样。我们正在使用MiddleName构建@FullName,不需要设置它。我不知道替换的行为。谢谢不客气。很高兴我能帮忙。当您不熟悉NULL在某些情况下的工作方式时,它可能会导致一些丑陋的问题。
SET @BodyMessage = REPLACE(@BodyMessage, 'FullName', ISNULL(@FullName, ''))
SET @BodyMessage = REPLACE(@BodyMessage, 'UserName', ISNULL(@UserName, ''))
Select @BodyMessage