2012-08-17 62 views
16

这里的第一个问题如下。我写了下面的代码,一切工作正常:如何在Transact-SQL中设置参数时连接字符串

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

结果:08月17执行报告,2012

而是试图串连以前的字符串,同时设置msdb.dbo.sp_send_dbmail过程的参数时,它失败

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

我知道我可以声明,并发送一个变量参数,但我想明白为什么它直接在参数级联时失败。感谢您的时间和知识

回答

23

T-SQL存储过程的参数值不能是表达式。他们需要是一个常数或一个变量。

MSDN - Specify Parameters

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

+2

谢谢,这是我一直在寻找。 – ChuyTM 2012-08-18 11:10:23

+0

无赖..但谢谢。 – Brian 2015-09-01 09:29:44

3

你需要做的:

DECLARE @Sub nvarchar(100); 
SET @Sub = 'Report executed on ' + CONVERT(VARCHAR(12), GETDATE(), 107); 
EXEC msdb.dbo.sp_send_dbmail @profile_name='XXX', 
@recipients='[email protected]', 
@subject = @Sub, 
@body= @tableHTML, 
@body_format = 'HTML'; 
+1

谢谢,我确实知道传递一个变量有效,但我不明白为什么。 – ChuyTM 2012-08-18 11:11:51

相关问题