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

How to insert current date into subject line of email SQL Server

我有一个生成特定 table 的存储过程,我需要通过电子邮件将其发送到我的电子邮件列表,其中包含当前日期的特定主题行。我使用了 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

我得到的错误:

是因为你需要把日期转换成varchar,这样+就被当做连接,而不是加法,或者如果你在[=25]就用CONCAT()函数=] 服务器 2012 以后。

@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

您可以使用 CONCAT:

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

Rextester Demo

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'