I am trying to develop a mail trigger. Could someone assist on how this could be achieved so that when a use inserts a record it check the "speed" field such that when the inserted value exceeds 100, a mail is send to the specified address.
What Are Triggered Emails? Triggered emails are automated emails, prompted when a subscriber takes a particular action or engages in a specific behavioral pattern or when certain changes take place within the product catalog.
If you find yourself needing to send an email automatically upon certain events occurring in SQL Server, you can do this via a trigger. For example, you could automatically send an email when somebody deletes or updates a record from a table, etc.
First you need to set up database mail - if you haven't done so, this question might help:
Then you need a trigger:
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
Now, you're probably going to say you want data from the insert to be actually be included in the e-mail. And your first inclination is going to be to declare some local variables and assign them from inserted
- this doesn't work because your trigger could be responding to a multi-row insert. So the right way to do this is:
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
That all said, I am not a big fan of sending e-mail from a trigger. Even though database mail uses service broker and so is asynchronous, I would be much more inclined to populate a queue table, and have a background thread that comes around and sends all of the appropriate e-mails. The twothree nice things about this are:
sp_send_dbmail
- which I inadvertently suggested - prevented the insert).If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With