Triggers - SQL Server: What Is A Trigger
Triggers - SQL Server: What Is A Trigger
Triggers - SQL Server: What Is A Trigger
triggers in sql
This article gives a brief introduction about Triggers in SQL Server 2000/2005.
Introduction
This article gives a brief introduction about Triggers in SQL Server 2000/2005.
What is a Trigger
A trigger is a special kind of a stored procedure that executes in response to certain action on the table like insertion,
deletion or updation of data. It is a database object which is bound to a table and is executed automatically. You can’t
explicitly invoke triggers. The only way to do this is by performing the required action on the table that they are assigned
to.
Types Of Triggers
There are three action query types that you use in SQL which are INSERT, UPDATE and DELETE. So, there are three
types of triggers and hybrids that come from mixing and matching the events and timings that fire them. Basically,
triggers are classified into two main types:
Let’s create After triggers. First of all, let’s create a table and insert some sample data. Then, on this table, I will be
attaching several triggers.
I will be creating an AFTER INSERT TRIGGER which will insert the rows inserted into the table into another audit table. The
main purpose of this audit table is to record the changes in the main table. This can be thought of as a generic audit
trigger.
This trigger is fired after an INSERT on the table. Let’s create the trigger as:
The CREATE TRIGGER statement is used to create the trigger. The ON clause specifies the table name on which the
trigger is to be attached. The FOR INSERT specifies that this is an AFTER INSERT trigger. In place of FOR INSERT,
AFTER INSERT can be used. Both of them mean the same.
In the trigger body, table named inserted has been used. This table is a logical table and contains the row that has been
inserted. I have selected the fields from the logical inserted table from the row that has been inserted into different
variables, and finally inserted those values into the Audit table.
To see the newly created trigger in action, let's insert a row into the main table as:
Now, a record has been inserted into the Employee_Test table. The AFTER INSERT trigger attached to this table
has inserted the record into the Employee_Test_Audit as:
if update(Emp_Name)
set @audit_action='Updated Record -- After Update Trigger.';
if update(Emp_Sal)
set @audit_action='Updated Record -- After Update Trigger.';
insert into
Employee_Test_Audit(Emp_ID,Emp_Name,Emp_Sal,Audit_Action,Audit_Timestamp)
values(@empid,@empname,@empsal,@audit_action,getdate());
The AFTER UPDATE Trigger is created in which the updated record is inserted into the audit table. There is no logical
table updated like the logical table inserted. We can obtain the updated value of a field from the
update(column_name) function. In our trigger, we have used, if update(Emp_Name) to check if the column
Emp_Name has been updated. We have similarly checked the column Emp_Sal for an update.
Let’s update a record column and see what happens.
This trigger is fired after a delete on the table. Let’s create the trigger as:
In this trigger, the deleted record’s data is picked from the logical deleted table and inserted into the audit table. Let’s
fire a delete on the main table. A record has been inserted into the audit table as:
All the triggers can be enabled/disabled on the table using the statement:
This disables the After Delete Trigger named trgAfterDelete on the specified table.
BEGIN
if(@emp_sal>1200)
begin
RAISERROR('Cannot delete where salary > 1200',16,1);
ROLLBACK;
end
else
begin
delete from Employee_Test where Emp_ID=@emp_id;
COMMIT;
insert into
Employee_Test_Audit(Emp_ID,Emp_Name,Emp_Sal,Audit_Action,
Audit_Timestamp)
values(@emp_id,@emp_name,@emp_sal,
'Deleted -- Instead Of Delete Trigger.',getdate());
PRINT 'Record Deleted -- Instead Of Delete Trigger.'
end
END
GO
This trigger will prevent the deletion of records from the table where Emp_Sal > 1200. If such a record is deleted, the
Instead Of Trigger will rollback the transaction, otherwise the transaction will be committed. Now, let’s try to delete a
record with the Emp_Sal >1200 as:
This will print an error message as defined in the RAISE ERROR statement as:
Hide Copy Code
In a similar way, you can code Instead Of Insert and Instead Of Update triggers on your tables.
Conclusion
In this article, I took a brief introduction of triggers, explained the various kinds of triggers – After Triggers and Instead Of
Triggers along with their variants and explained how each of them works. I hope you will get a clear understanding about
the Triggers in SQL Server and their usage.
License
This article, along with any associated source code and files, is
licensed under The Code Project Open License (CPOL)
Share
Myself Sudipta Chaudhari and I am B.TECH in Computer Science by education, Software Developer by profession and
Senior Technical Lead by designation. I have 13+ yrs of professional work experience and have multiple onsite/client site
visit experiences. I am working with one of the largest reputed MNC in India.
I have extensive experience working on Microsoft .NET technologies – Azure, ASP.NET Web API, ASP.NET MVC, C#, SQL
Server and JavaScript frameworks like jQuery, Angular 4 etc. I am also a SCRUM Master.
I can be contacted for full time job opportunities as a SENIOR TECHNICAL ARCHITECT/ TECHNICAL MANAGER /
PROJECT MANAGER.
Search Comments
Your maths does not appear to add up. Working since 2008. 13 years professional
experience - therefore at time of writing it must have been 2021. Are you a time
traveller?
Sign In · View Thread
very useful
Sign In · View Thread
Sign In · View Thread
Sign In · View Thread
I am very thankful to the s.india Software Developer (Senior). Because I have no idea about sql trigger even though
4 years of PHP experience. But your SQL Trigger tutorial is very very very very helpful for me.
it should be "by performing the required action on the table" instead of "by performing the required action no the
table".
Sign In · View Thread
Sign In · View Thread
I want to thank the person that wrote this article so much, because I had never understood triggers all through
school, and now I have a thorough understanding of then, all thanks to this article!
Sign In · View Thread
Sign In · View Thread
Sign In · View Thread
This code you're presenting here is HORRIBLY BAD and factually wrong.....
If your SQL INSERT statement inserts 10 or 20 rows at once (using a SELECT from another table), then this trigger
will be called once, and the Inserted pseudo table will contain 10 or 20 rows.
Which one of those do you think you're getting with your SELECT statement?? It's undetermined - you'll get one,
arbitrary row - and you plainly ignore all others!!
This code should be TOSSED OUT right now and REWRITTEN entirely to take into account that a trigger CAN (and
WILL!) get multiple rows in its Inserted (and Deleted) pseudo tables!
=============================
Marc Scheuner, Berne, Switzerland
mscheuner - at - gmail.com
May The Source Be With You!
Sign In · View Thread
Member 8979127 25-Feb-15 22:45
Thank you. Excellent as always!
Sign In · View Thread
thanks for your great article. before reading this article i had no idea whats is the triggers are. i have done the
triggers for my degree,but i have totally forgot those stuff. thank you very much for this great article. i hope you
will publish those kind of articles future. you are great.thank you
Sign In · View Thread
Thanks...
Sign In · View Thread
Sign In · View Thread
Sign In · View Thread
This is very good artical and easy to understand.But may have multiple rows to insert or update or delete from
store procedure,
Sign In · View Thread
Sign In · View Thread
Sign In · View Thread
thje triggers are being made just fine but when i am trying to look for data in th trigger_action table i am not
getting the corre3ct inserted data , i am getting the last row of my table
can u plzz tell me how to get the data that i insert into table or deleted data from it
Sign In · View Thread
I was about to add an article related to triggers, before doing so i got this article. Its very good and well explained.
You can read sql interview questions and answers
or directly check sql triggers interview questions and answers[^]
Having created a trigger which logs the actions in a table called event_logs that includes the following data; the
user, date/time, attempt type and view name. (The attempt_type and view name data must not be hard coded. This
means that the system should provide those two details when a drop action is attempted - I have got this wrong
somewhere, can anybody please help me? Thanks
This is the code so far:
IF OBJECT_ID ('event_log') IS NOT NULL
DROP TABLE dbo.event_log
GO
GO
AS
Sign In · View Thread
gd
Sign In · View Thread
Last Visit: 15-Apr-19 21:38 Last Update: 15-Apr-19 21:38 Refresh 1 2 3 4 5 Next »
Permalink | Advertise | Privacy | Cookies | Terms of Use | Mobile Layout: Article Copyright 2008 by Sudipta Chaudhari
Web05 | 2.8.190416.1 | Last Updated 26 Apr 2008 fixed | fluid Everything else Copyright © CodeProject, 1999-2019