24

这里的第一个问题是以下。我编写了以下代码,一切正常:

DECLARE @subject NVARCHAR(100)
SET @subject = 'Report executed on ' + CONVERT(VARCHAR(12), GETDATE(), 107)
SELECT @subject

结果:报告于 2012 年 8 月 17 日执行

但是在设置 msdb.dbo.sp_send_dbmail 过程的参数时尝试连接前一个字符串时,它会失败

EXEC msdb.dbo.sp_send_dbmail @profile_name='XXX',
@recipients='XXXX@XXXXX.com',
@subject = 'Report executed on ' + CONVERT(VARCHAR(12), GETDATE(), 107),
@body= @tableHTML,
@body_format = 'HTML';

我知道我可以声明一个变量并将其发送给参数,但我想了解为什么直接在参数中连接时它会失败。感谢您的时间和知识

4

2 回答 2

34

T-SQL 存储过程的参数值不能是表达式。它们必须是常量或变量。

MSDN - 指定参数

过程调用提供的参数值必须是常量或变量;函数名不能用作参数值。变量可以是用户定义的或系统变量,例如@@spid。

于 2012-08-17T16:55:50.767 回答
5

你需要做:

DECLARE @Sub nvarchar(100);
SET @Sub = 'Report executed on ' + CONVERT(VARCHAR(12), GETDATE(), 107);
EXEC msdb.dbo.sp_send_dbmail @profile_name='XXX',
@recipients='XXXX@XXXXX.com',
@subject = @Sub,
@body= @tableHTML,
@body_format = 'HTML';
于 2012-08-17T19:08:54.997 回答