如何将当前日期插入电子邮件的主题行 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),
这也适用于 INT
、DECIMAL
和其他数据类型。这就是为什么... SELECT GETDATE() + 1
没有将数字 1 添加到日期的末尾,它确实增加了一天。 (不要使用这个,使用 DATEADD
)
您可以使用 CONCAT
:
DECLARE @SubjectTxt varchar(max) = CONCAT('Some text ', cast(GETDATE() as date))
SELECT @SubjectTxt;
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'
我有一个生成特定 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),
这也适用于 INT
、DECIMAL
和其他数据类型。这就是为什么... SELECT GETDATE() + 1
没有将数字 1 添加到日期的末尾,它确实增加了一天。 (不要使用这个,使用 DATEADD
)
您可以使用 CONCAT
:
DECLARE @SubjectTxt varchar(max) = CONCAT('Some text ', cast(GETDATE() as date))
SELECT @SubjectTxt;
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'