需要将存储过程中的参数传递给sp_send_dbmail @query

时间:2014-01-23 22:38:54

标签: sql sql-server stored-procedures sp-send-dbmail

我有一个执行查询的存储过程,然后调用dbmail。邮件消息包括执行的查询的结果。我想在两个地方将参数/变量传递给查询:存储过程和dbmail中的@query。下面是我想运行它的方法,但是我收到一个错误,因为参数(@Threshold)没有传递给dbmail块。我怎么能这样做?

ALTER PROCEDURE [dbo].[spMyProcedure] @Threshold float

AS

IF EXISTS (SELECT Fields FROM Table
WHERE DataValue < @Threshold AND LocalDateTime >= DATEADD(hour, -24, SYSDATETIME())
GROUP BY Fields)

BEGIN

SET NOCOUNT ON

EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Profile',
@from_address = 'data@data.com',
@recipients = 'data@data.com',
@subject = 'Data Warning',
@body = 'The following results are outside the defined range.',
@query = 'SELECT Fields FROM Table
WHERE DataValue < @Threshold AND LocalDateTime >= DATEADD(hour, -24, SYSDATETIME())
GROUP BY Fields' ;

END

1 个答案:

答案 0 :(得分:1)

您正在将字符串传递给@query参数,因此它不知道@Threshold的值。您需要创建一个字符串变量并包含实际值。然后,您可以将该变量传递给sp_send_dbmail过程。

DECLARE @qry varchar(MAX)
SET @qry = 'SELECT Fields FROM Table WHERE DataValue < ' 
+ cast(@Threshold as varchar) + 
' AND LocalDateTime >= DATEADD(hour, -24, SYSDATETIME()) GROUP BY Fields' 
相关问题