0
我有一个存储过程,它执行查询并调用dbmail。邮件消息包含执行的查询结果。我想在这两个地方向查询传递一个参数/变量:存储过程和dbmail中的@query。以下是我想如何运行它,但由于参数(@Threshold)未传递到dbmail块,所以出现错误。我怎样才能做到这一点?需要将存储过程中的参数传递给sp_send_dbmail @query
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 = '[email protected]',
@recipients = '[email protected]',
@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
在我看来,像你的解决方案应该工作,但我得到这个错误: 消息22050,级别16,状态1,行0 错误格式查询,可能是无效的参数 消息14661,级别16 ,状态1,过程sp_send_dbmail,行517 查询执行失败:消息105,级别15,状态1,服务器WIN-O9R9U2CPD6B,第2行 字符串'i '后未使用引号。 Msg 102,Level 15,State 1,Server WIN-O9R9U2CPD6B,Line 2 'i '附近的语法不正确。 – user3229811
我使@qry字符串的大小太小,并且截断了字符串。我相应地更新了示例。 – cdev
是的,我设置了@qry VARCHAR(500),它工作得很好。谢谢。 – user3229811