我试着在每一个该死的论坛各种途径建议,但都无济于事! 需要发送SQLPERF(LOGSPACE),已被存储在表中的结果,通过sp_send_dbmail
给收件人。
工作的第2步是哪里出现故障。 请帮忙!
EXEC msdb.dbo.sp_send_dbmail
@profile_name= 'MyDBA',
@recipients= 'Mack@mydba.co.za',
@subject='Log Warning',
@query='SELECT * from #TempForLogSpace WHERE LogSpaceUsed >80
使用数据库邮件不能从一个临时表查询。 您用来创建临时表(你的工作的步骤1我假设)会话已关闭,一个新的会话启动时第2步开始。 由于会话已关闭的表已被删除(即使该表没有被丢弃,因为它是一个新的会话你没有访问其他会话临时表)。
无论是创建一个物理表,并使用(无论是在tempdb数据库或数据库),或者把它创建在@query的输出与代码中的SELECT * FROM末#TempForLogSpace(存储过程会更容易处理在这种情况下)。
我知道这个线程是有点老了,但万一有人绊倒在此,问题是像mrdenny说,sp_send_dbmail存储过程在它自己的会话中运行,但是你可以通过使用全局临时表,而不是解决这个问题(前缀表有两个井号(##))。
只需使用一个全局临时表像##temp_table
。 该表将是所有会话访问,将保留在数据库中,直到它所指的所有会话已被关闭。
在SQL Server中本地和全局临时表