Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server T-SQL电子邮件正文上的REPLACE语句导致空值_Sql Server_Tsql_Sqlmail - Fatal编程技术网

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