2009-08-24 48 views
7

He intentado todas las avenidas en cada maldito foro sugerido, pero fue en vano! Necesita enviar los resultados de SQLPERF (logspace), que se han almacenado en una tabla, a través del sp_send_dbmail al destinatario.sp_send_dbmail no enviará los resultados de la consulta

El paso 2 del trabajo es donde ocurre la falla. ¡Por favor ayuda!

EXEC msdb.dbo.sp_send_dbmail 
@profile_name= 'MyDBA', 
@recipients= '[email protected]', 
@subject='Log Warning', 
@query='SELECT * from #TempForLogSpace WHERE LogSpaceUsed >80 
+0

¿Notó la cotización de cierre que falta de '@ query'? – jumxozizi

Respuesta

10

No se puede realizar una consulta desde una tabla temporal utilizando el correo de la base de datos. La sesión que usó para crear la tabla temporal (el paso 1 de su trabajo, supongo) se ha cerrado y se inició una nueva sesión cuando se inició el paso 2. Debido a que la sesión se ha cerrado, la tabla se ha eliminado (incluso si la tabla no se ha eliminado porque es una sesión nueva, no tiene acceso a la tabla temporal de otras sesiones).

Cree una tabla física y utilícela (ya sea en la base de datos tempdb o en su base de datos) o coloque el código que crea la salida en @query con la selección * de #TempForLogSpace al final (un procedimiento almacenado será mucho más fácil de tratar en este caso).

5

Sé que este hilo es un poco viejo, pero en caso de que alguien se tropiece con esto, el problema es que mrdenny dijo que el procedimiento sp_send_dbmail almacenado se ejecuta en su propia sesión, pero puedes evitar esto usando una tabla temporal global (prefija la tabla con dos signos de libra (##)).

0

Simplemente use una tabla global de temperatura como ##temp_table. Esta tabla será accesible para todas las sesiones y permanecerá en la base de datos hasta que se hayan cerrado todas las sesiones que la remitieron.

Local and global temporary tables in SQL Server

Cuestiones relacionadas