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 は空白になります。2 つの 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 データベースの送信済みメール テーブルを確認すると、本文が null です。

私がやろうとしているのは、replace ステートメントでフィールドを正しく置き換えることです。私は何を間違っていますか?

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 に答える