Estoy intentando desarrollar un disparador de correo. ¿Podría alguien ayudarnos sobre cómo se puede lograr esto para que cuando un uso inserte un registro revise el campo "velocidad" de modo que cuando el valor insertado exceda 100, se envíe un correo a la dirección especificada.Enviar correo electrónico desde un desencadenador
Respuesta
primer lugar usted necesita para configurar el correo de base de datos - si no lo ha hecho, esta pregunta podría ayudar:
Luego hay un disparador:
CREATE TRIGGER dbo.whatever
ON dbo.wherever
FOR INSERT
AS
BEGIN
SET NOCOUNT ON;
IF EXISTS (SELECT 1 FROM inserted WHERE speed > 100)
BEGIN
EXEC msdb.dbo.sp_send_dbmail
@recipients = '[email protected]',
@profile_name = 'default',
@subject = 'Someone was speeding',
@body = 'Yep, they sure were.';
END
END
GO
Ahora, probablemente diga que desea que los datos del inserto se incluyan realmente en el correo electrónico. Y su primera inclinación será declarar algunas variables locales y asignarlas desde inserted
; esto no funciona porque su activador podría estar respondiendo a una inserción de varias filas. Así que la forma correcta de hacer esto es:
CREATE TRIGGER dbo.whatever
ON dbo.wherever
FOR INSERT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @body NVARCHAR(MAX) = N'';
SELECT @body += CHAR(13) + CHAR(10) + RTRIM(some_col) FROM inserted;
IF EXISTS (SELECT 1 FROM inserted WHERE speed > 100)
BEGIN
EXEC msdb.dbo.sp_send_dbmail
@recipients = '[email protected]',
@profile_name = 'default',
@subject = 'At least one person was speeding',
@body = @body;
END
END
GO
Dicho todo esto, yo no soy un gran fan de envío de e-mail de un gatillo. Aunque el correo de la base de datos utiliza el intermediario de servicios y, por lo tanto, es asíncrono, me inclinaría mucho más a rellenar una tabla de colas, y tengo un hilo de fondo que aparece y envía todos los correos electrónicos apropiados. Los dos tres cosas buenas acerca de esto son:
- a minimizar los posibles retrasos en la comisión de la transacción externa que disparó el gatillo - cuanto más complicada sea la lógica en el gatillo, el más lento de realizar este proceso.
- dado que probablemente no sea esencial que el correo electrónico se envíe en el microsegundo en que se insertó la fila, puede fluctuar fácilmente el tiempo del proceso en segundo plano; esto evita tener que consultar la tabla muy minuciosamente, todo el día, cuando veces tendrá que hacer algo.
- Como @goodeye señaló, mantener este proceso separado puede evitar que los errores en la parte del correo electrónico interfieran con el archivo DML original (en su caso, un parámetro no válido en
sp_send_dbmail
- que sugerí inadvertidamente) impidió la inserción)
Gracias por los comentarios. ¿Cómo configuro el correo de la base de datos? –
+1 por 'Sí, seguro que sí.' – JNK
Gracias. Tu solución funciona bien –
- 1. Enviar correo electrónico desde Cocoa
- 2. enviar correo electrónico desde localhost
- 3. vb.net enviar correo electrónico
- 4. Enviar correo electrónico - Cocoa
- 5. ¿Cómo enviar un correo electrónico desde Asp.net Mvc-3?
- 6. ¿Cómo enviar un correo electrónico desde la Terminal?
- 7. Cómo enviar un correo electrónico html a outlook desde Java
- 8. ¿Cómo enviar un correo electrónico desde jsp/servlet?
- 9. enviar correo electrónico asp.net C#
- 10. iphone app enviar correo electrónico
- 11. cómo enviar correo electrónico HTML
- 12. ¿Enviar correo electrónico de Elmah?
- 13. C# Enviar correo electrónico masivo
- 14. Enviar correo electrónico desde la consola de rails
- 15. Enviar correo electrónico desde el programa Ruby con TLS
- 16. ¿Cómo enviar correo electrónico desde localhost usando PHP en Linux
- 17. Enviar correo electrónico desde la línea de comando en symfony2
- 18. MVC HTML5 enviar por correo electrónico
- 19. KRL: ¿puedo enviar un correo electrónico con el correo electrónico: forward()?
- 20. Node.js - Enviar correo electrónico en el registro
- 21. Usando Android Intent.ACTION_SEND para enviar correo electrónico
- 22. Guión de shell para enviar correo electrónico
- 23. ¿Cómo enviar archivos adjuntos de correo electrónico?
- 24. Enviar correo electrónico de activación al usuario
- 25. Enviar correo electrónico a múltiples direcciones Android
- 26. Log4Net + ¿Enviar correo electrónico cuando haya terminado?
- 27. Enviar correo electrónico asincrónico con phpmailer
- 28. Enviar una tabla en el correo electrónico
- 29. Enviar correo electrónico programáticamente en Android
- 30. Es posible enviar un correo electrónico mediante programación sin utilizar ninguna cuenta de correo electrónico real
También necesita OTORGAR EJECUTAR al usuario para msdb.dbo.sp_send_dbmail si se está ejecutando en una aplicación, por ejemplo. – smoore4