Trigger Email After the record is inserted/deleted/updates from a table

  • Hi,

    I have following requirement.

    There is Sql server DB table OrderDetails. It has date, UserName , Details, OrderID columns.

    Case 1: I want to send email alert whenever any new record is inserted then email should be sent with below details.

    The new records date and time of insertion, UserName who inserted the record, message like " A new record was inserted to OrderDetails table"

    Case 2: For update in DB table OrderDetails, then email should be sent like.

    The new records date and time of updation, UserName who updated the records, message like " A new record was updated to OrderDetails table"

    Case 3: For Delete in DB table OrderDetails, then email should be sent like.

    The new records date and time of Deletion, UserName who deleted the records, message like " A new record was deleted into OrderDetails table"

     

    Can someone please assist me with sql script?

  • What you're looking for are the INSERTED and DELETED tables that are available within a trigger. For an INSERT operation, you'll only see detail in the INSERTED table. For a DELETE operation, you'll only see detail in the DELETED table. For an UPDATE, you'll see it both tables, giving you the information added in the INSERTED table and the information that was modified in the DELETED table. The queries to retrieve information from these tables are extremely straight forward as shown in the examples at the link. Even if multiple rows were added, removed or modified, they'll show in the INSERTED and DELETED tables.

    Now, a word on triggers & email. If this table is high volume at all, this could be an extremely problematic process for your system. You might be better off looking at something like Change Data Capture or using Extended Events to capture queries and their parameters.

    "The credit belongs to the man who is actually in the arena, whose face is marred by dust and sweat and blood"
    - Theodore Roosevelt

    Author of:
    SQL Server Execution Plans
    SQL Server Query Performance Tuning

  • I'd consider writing the output from these triggers into a custom 'MessageQueue' table and having a separate periodic process running which picks up unprocessed rows from this table, sends the necessary e-mails and then marks the entries as processed.

    The absence of evidence is not evidence of absence.
    Martin Rees

    You can lead a horse to water, but a pencil must be lead.
    Stan Laurel

  • Thanks for you reply.

    You mean I need to create two separate triggers lime below?

    CREATE TRIGGER TR_OrderDetails

    ON dbo.OrderDetails

    AFTER INSERT

    AS

    SELECT *

    FROM Inserted;

    GO

    CREATE TRIGGER TR_OrderDetails_Del

    ON dbo.OrderDetails

    AFTER DELETE

    AS

    SELECT *

    FROM Deleted;

    GO

  • No, a single trigger can be used to cover multiple operations

    CREATE TRIGGER ON ...

    AFTER INSERT, UPDATE, DELETE

    <trigger logic here>

    The absence of evidence is not evidence of absence.
    Martin Rees

    You can lead a horse to water, but a pencil must be lead.
    Stan Laurel

Viewing 5 posts - 1 through 4 (of 4 total)

You must be logged in to reply to this topic. Login to reply