Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 需要将存储过程中的参数传递给sp_send_dbmail@query_Sql_Sql Server_Stored Procedures_Sp Send Dbmail - Fatal编程技术网

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

Sql 需要将存储过程中的参数传递给sp_send_dbmail@query,sql,sql-server,stored-procedures,sp-send-dbmail,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 &l

我有一个存储过程,它执行一个查询,然后调用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

您正在向@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' 

在我看来,您的解决方案应该可以工作,但我得到了以下错误:Msg 22050,级别16,状态1,第0行错误格式化查询,可能是无效参数Msg 14661,级别16,状态1,过程sp_send_dbmail,第517行查询执行失败:Msg 105,级别15,状态1,服务器WIN-O9R9U2CPD6B,第2行字符串“i”后的未闭合引号。Msg 102,级别15,状态1,服务器WIN-O9R9U2CPD6B,第2行“i”附近的语法不正确。我将@qry字符串大小设置得太小,它正在截断字符串。我相应地更新了示例。是的,我设置了@qry VARCHAR500,效果很好。谢谢