Implementing Triggers in SQL Server 2000

Since the trigger trgEncrypted is created with the option WITH ENCRYPTION, the trigger definition is hidden and there is no way that one can easily decrypt the trigger code.

We all know that the DML statements change or modify data. Sometimes it becomes necessary for the triggers to have the access to the changes being caused by the DML statements. SQL Server 2000 provides four different ways to determine the affects of the DML statements. The INSERTED and DELETED tables, popularly known as MAGIC TABLES, and update () and columns_updated() functions can be used to determine the changes being caused by the DML statements.

The below table depicts the contents of the INSERTED and DELETED tables for three different table Events

EVENT

INSERTED

DELETED

Insert

Contains the inserted rows

Empty

Delete

Empty

Contains the rows to be deleted

Update

Contains the rows after update

Contains the rows before update

Note that the Magic Table does not contain the information about the columns of the data-type text, ntext, or image. Attempting to access these columns will cause an error.

The update() function is used to find whether a particular column has been updated or not. This function is generally used for data checks.

CREATE TRIGGER trgUddate

ON User_Details

FOR UPDATE

AS

If UPDATE(FName)

BEGIN

             PRINT(‘AFTER Trigger [trgUddate] – Executed – First Name has been updated’)

             ROLLBACK TRANSACTION

END

else If UPDATE(LName)

BEGIN

             PRINT(‘AFTER Trigger [trgUddate] – Executed – Last Name has been updated’)

             ROLLBACK TRANSACTION

END

else If UPDATE(MName)

BEGIN

             PRINT(‘AFTER Trigger [trgUddate] – Executed – MName Name has been updated’)

             ROLLBACK TRANSACTION

END

else If UPDATE(Email)

BEGIN

             PRINT(‘AFTER Trigger [trgUddate] – Executed – Email has been updated’)

             ROLLBACK TRANSACTION

END

GO

UPDATE User_Details

SET MName = ‘Diwaker’

WHERE UserID = 1

Output

AFTER Trigger [trgUddate] – Executed – MName Name has been updated

Depending upon the column updated, a message will be displayed. With this feature we can determine which column in the table has been updated, and then proceed with the business rules to be implemented further.

Columns_Update() function returns a varbinary data type representation of the columns updated. This function return a hexadecimal values from which we can determine which columns in the table have been updated.

INSTEAD OF Triggers

A trigger which gets executed automatically in place of triggering actions i.e., INSERT, DELETE and UPDATE is called an INSTEAD OF trigger.

INSTEAD OF triggers gets executed automatically before the Primary Key and the Foreign Key constraints are checked, whereas the traditional AFTER triggers gets executed automatically after these constraints are checked.

CREATE TRIGGER trgAfterInsert

On User_Details

FOR INSERT

AS

BEGIN

  Print (‘AFTER Trigger [trgAfterInsert] – Trigger executed !!’)

END

INSERT INTO USER_DETAILS(USERID, FNAME,LNAME, MNAME, EMAIL)

VALUES(100, ‘FName’,’LName’,’MName’,’test@test.com’)

Continues…

Leave a comment

Your email address will not be published.