Pregunta

EXEC msdb.dbo.sp_send_dbmail 
@recipients= 'test@test.com',
@copy_recipients = 'test@test.com', 
@query = 'SELECT * FROM INSERTED',
@attach_query_result_as_file = 1,
@subject = 'Auto-Generated Deleted Item in Order Item Detail', 
@body = 'Item has been deleted from Order Item Detail', 
@body_format = 'HTML',
@importance = 'High'

Cuando se ejecuta el código anterior, recibo el siguiente error:

MSG 22050, Nivel 16, Estado 1, Línea 0 Consulta de formato de error, Probablemente parámetros inválidos Msg 14661, Nivel 16, Estado 1, Procedimiento SP_SEND_DBMAIL, Línea 495 Ejecución de consultas Fallado: MSG 208, Nivel 16, Estado 1, servidor BK00SQL0002, Línea 1 Nombre del objeto no válido 'Insertado'.

Lo siguiente funciona: (¿Cómo modifico para insertar?)

    EXEC msdb.dbo.sp_send_dbmail 
@recipients= 'test@test.com',
@copy_recipients = 'test@test.com',
@query = 'SELECT * FROM [PreMfg].[dbo].[Order Item Detail Audit]', 
@subject = 'An Item Has Been Deleted From the Order Item Detail Table',
@attach_query_result_as_file = 1, 
@body = 'An Item Has Been Deleted From the Order Item Detail Table', 
@body_format = 'HTML',
@importance = 'High'
¿Fue útil?

Solución

No puede hacer referencia a la pseudo tabla insertada desde fuera del gatillo. ¿Y realmente quieres enviar un correo electrónico para cada inserto/actualización? ¿Y hacer la transacción que invocó el desencadenante esperar a que todo eso suceda (aunque el correo de la base de datos es asíncrono, no es gratis)?

Le sugiero que registre los datos a una tabla de colas, y tenga un trabajo que cada minuto (o cinco minutos, o alguna frecuencia razonable) se despierte y envía el correo para cualquier dato nuevo que encuentre en la tabla de colas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top