如何将当前日期插入电子邮件SQL Server的主题行

时间:2018-08-22 18:57:36

标签: sql sql-server date email getdate

我有一个存储过程,该存储过程会生成一个特定的表,我需要将该表发送给带有当前日期的特定主题行的电子邮件列表。我使用了GETDATE()函数,但出现错误。下面是我的代码:

    if exists (select * from #Notify)
    begin

        declare
            @TableHtml varchar(max);

        exec GetTableHtml #Notify, @TableHtml = @TableHtml output;

            declare
                @FromName varchar(128) = 'AB',
                @FromEmail varchar(128) = 'ab@xy.com',
                @ToEmailListName varchar(max) = 'SomeList',
                @SubjectTxt varchar(max) = 'Some text' + cast(GETDATE() as date),
                @BodyTxt varchar(max) = 'Body content:<br><br>' + @TableHtml + '
                <br><br>Thanks.';

            exec StartSendEmail
                @FromName = @FromName,
                @FromEmail = @FromEmail,
                @ToEmailListName = @ToEmailListName,
                @SubjectTxt = @SubjectTxt,
                @BodyTxt = @BodyTxt;

    end

我遇到的错误:
enter image description here

3 个答案:

答案 0 :(得分:5)

这是因为您需要将日期转换为varchar,以便将+视为串联,而不是加法,或者如果您使用的是SQL Server 2012及更高版本,请使用CONCAT()函数。

@SubjectTxt varchar(max) = 'Some text' + cast(cast(GETDATE() as date) as varchar(64)),

或更简单地...

@SubjectTxt varchar(max) = 'Some text' + convert(varchar(10),GETDATE(),101),

这也适用于INTDECIMAL和其他数据类型。这就是为什么... SELECT GETDATE() + 1不会在日期末尾添加数字1,而实际上是增加了一天。 (不过请不要使用,请使用DATEADD

答案 1 :(得分:1)

您可以使用CONCAT

DECLARE @SubjectTxt varchar(max) = CONCAT('Some text ', cast(GETDATE() as date))
SELECT @SubjectTxt;

Rextester Demo

答案 2 :(得分:0)

DECLARE @s VARCHAR(max)
SET @s = 'Data for '+CONVERT(VARCHAR(12),GETDATE(),107)


EXEC msdb.dbo.sp_send_dbmail 
@recipients=@email,
@body= @msg,
@body_format = 'HTML',
@subject = @s
@profile_name = 'testprofile'