The SQL INSTEAD OF DELETE trigger will fire before the execution starts. So, use this SQL INSTEAD OF DELETE trigger to store the values in another table before the delete option, or perform some operation, or deleting different tables, etc.
For this SQL INSTEAD OF DELETE trigger demo, we use the below tables. Here, our task is to create an SQL Server INSTEAD OF DELETE TRIGGER on this Employee table. And by using this trigger, we want to restrict the delete operation
Employee Table Audit also holds the same 14 records, along with the Server Instance name, Server name, and Insert Time (Audit Information).
Instead Of DELETE Triggers in SQL Server Example
SQL Instead of Delete Triggers created in Tables and Views. Usually, we use these triggers on Views. Let us see how to create an Instead of delete Triggers in SQL Server. For instance, if you want to restrict the users from deleting the records in the original table, and you want those logs in another historical table, use this trigger.
Here, we will create a trigger on the Employee table using the CREATE TRIGGER statement. From the below code, you can see we are using the MERGE statement to select all the records that you want to delete from the Employee table. Then we are deleting those records from the Audit table.
It means when the user deletes any Employee table record, the Instead od delete triggers will delete those records from the audit table. And it kept the Employee table unchanged.
-- Example for INSTEAD OF DELETE Triggers in SQL Server USE [SQL Tutorial] GO CREATE TRIGGER InsteadOfDELETETriggerExample on [EmployeeTable] INSTEAD OF DELETE AS MERGE [EmployeeTableAudit] AS AuditTab USING (SELECT * FROM DELETED) AS Emp ON AuditTab.ID = emp.ID WHEN MATCHED THEN DELETE; PRINT 'We Successfully Fired Our First INSTEAD OF DELETE Triggers in SQL Server.' GO
Let me show you the newly created Instead Of DELETE Trigger by opening the Object explorer. Next, Go to the SQL Tutorial Database -> expand the Employee Table -> and then expand the Triggers Folder
For the demonstration purpose, we are deleting all the records in the Employee table whose Occupation = Professional, or Education = Bachelors.
-- SQL Instead Of DELETE Triggers Example USE [SQL Tutorial] GO DELETE FROM [EmployeeTable] WHERE [Occupation] = N'Professional' OR [Education] = N'Bachelors'
From the above screenshot, you can see that our SQL Server Instead Of DELETE Triggers in is triggered. And, instead of deleting 4 records from the Employee table, it is deleting from the Employee Audit table. Please use the following SQL Query to check the inserted records in the Employee table
-- SQL Server Instead Of DELETE Triggers Example SELECT [ID] ,[Name] ,[Education] ,[Occupation] ,[YearlyIncome] ,[Sales] FROM [EmployeeTable]
Although we performed the delete operation on the Employee table. As you can see from the above screenshot, our Emp table is unchanged. Next, check the records in the Employee table Audit using the following select query.
-- SQL Instead Of DELETE Triggers Example USE [SQL Tutorial] GO SELECT [Name] ,[Education] ,[Occupation] ,[YearlyIncome] ,[Sales] ,[ServerName] ,[ServerInstanceName] ,[Insert Time] FROM [EmployeeTableAudit]
Here, you can see that the SQL Server Instead Of DELETE Triggers deleted the matched records from the Employee audit table.