我有一个存储过程,该存储过程会生成一个特定的表,我需要将该表发送给带有当前日期的特定主题行的电子邮件列表。我使用了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
答案 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),
这也适用于INT
,DECIMAL
和其他数据类型。这就是为什么... SELECT GETDATE() + 1
不会在日期末尾添加数字1,而实际上是增加了一天。 (不过请不要使用,请使用DATEADD
)
答案 1 :(得分:1)
您可以使用CONCAT
:
DECLARE @SubjectTxt varchar(max) = CONCAT('Some text ', cast(GETDATE() as date))
SELECT @SubjectTxt;
答案 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'