首页 > 解决方案 > 如何将当前日期插入电子邮件 SQL Server 的主题行

问题描述

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

我得到的错误:
在此处输入图像描述

标签: sqlsql-serverdateemailgetdate

解决方案


这是因为您需要将日期转换为,varchar以便将+其视为连接,而不是添加,或者CONCAT()如果您使用的是 SQL Server 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


推荐阅读