1
ALTER TRIGGER [dbo].[AlertMail_tr]
ON 
[dbo].[MethodToLog_tbl]
AFTER INSERT 
AS      
BEGIN
DECLARE @LogId int
SET @LogId = (SELECT LogDataId FROM inserted)
if(SELECT Failure_flag FROM inserted)=1
begin
        exec [DB].[dbo].SendMail_prc
        @Command='EXEC CheckNew.dbo.FailureMail_prc @LogId'
        ,@MailPriority=1
        ,@MailRecipients='abc@xyz.com'
        ,@Subject='Alert-Failure'

end
END

我收到此错误:

必须声明标量变量@LogId。

4

2 回答 2

2
@Command='EXEC CheckNew.dbo.FailureMail_prc @LogId='+cast ( @LogId as nvarchar(100))

或者

@Command='EXEC CheckNew.dbo.FailureMail_prc '+cast ( @LogId as nvarchar(100))

还 ,

在 执行字符串查询之前输入一个值。@LogId

编辑

declare @tmp nvarchar(max)
set @tmp='EXEC CheckNew.dbo.FailureMail_prc '+cast (@LogId as nvarchar(100))



 exec [DB].[dbo].SendMail_prc
        @Command=@tmp
        ,@MailPriority=1
        ,@MailRecipients='abc@xyz.com'
        ,@Subject='Alert-Failure'
于 2012-04-16T09:28:30.223 回答
0

您的 @LogId 变量在 EXEC 命令的范围内不存在。它只看到它里面的东西,所以只要它是一致的,这条线DECLARE @LogId int是不存在的。

您需要传递带有变量值的字符串。

declare @aux varchar(100)
set @aux ='EXEC CheckNew.dbo.FailureMail_prc '+cast ( @LogId as varchar(10)) 

        exec [DB].[dbo].SendMail_prc
        @Command=@aux
        ,@MailPriority=1
        ,@MailRecipients='abc@xyz.com'
        ,@Subject='Alert-Failure'

当然,根据需要更正长度

于 2012-04-16T09:44:04.867 回答