【问题标题】:sp_send_dbmail will not send query resultssp_send_dbmail 不会发送查询结果
【发布时间】:2010-11-22 06:40:41
【问题描述】:

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

【问题讨论】:

  • 您是否注意到@query 缺少的结束语?

标签: sql-server temp-tables sp-send-dbmail


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      Local and global temporary tables in SQL Server

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-02-19
        • 1970-01-01
        • 1970-01-01
        • 2023-01-25
        • 1970-01-01
        • 2016-07-23
        • 1970-01-01
        相关资源
        最近更新 更多