7

我已经尝试了每个该死的论坛上建议的所有途径,但无济于事!需要将存储在表中的 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
4

3 回答 3

10

您不能使用数据库邮件从临时表中查询。您用于创建临时表的会话(我假设您的工作的第 1 步)已关闭,并且在第 2 步开始时启动了一个新会话。因为会话已关闭,表已被删除(即使该表没有被删除,因为它是一个新会话,您无权访问其他会话临时表)。

创建一个物理表并使用它(在 tempdb 数据库或您的数据库中)或将创建输出的代码放在 @query 中,最后使用 select * from #TempForLogSpace(存储过程将更容易处理在这种情况下)。

于 2009-08-24T13:14:24.847 回答
5

我知道这个线程有点旧,但如果有人偶然发现这个问题,问题就像 mrdenny 说 sp_send_dbmail 存储过程在它自己的会话中运行,但是你可以通过使用全局临时表来解决这个问题(为表添加前缀带有两个井号 (##))。

于 2011-01-31T19:14:52.013 回答
0

只需使用全局临时表,如##temp_table. 所有会话都可以访问此表,并且将保留在数据库中,直到所有引用它的会话都已关闭。

SQL Server 中的本地和全局临时表

于 2013-10-18T09:04:44.480 回答