Mega Code Archive

 
Categories / MSSQL Tutorial / Trigger
 

Define variables in a trigger

4>  CREATE TABLE employee 5> ( 6>    emp_id         varchar(20), 7>    fname          varchar(20)       NOT NULL, 8>    minit          char(1)               NULL, 9>    lname          varchar(30)       NOT NULL, 10>    job_id         smallint          NOT NULL       DEFAULT 1, 11>    job_lvl        tinyint                          DEFAULT 10, 12>    pub_id         char(4)           NOT NULL       DEFAULT ('9952'), 13>    hire_date      datetime          NOT NULL       DEFAULT (getdate()) 14> ) 15> GO 1> 2> insert employee values ('1', 'Jack', 'T', 'Lee',     2, 215, '9952', '11/11/89') 3> insert employee values ('2', 'Jode', 'M', 'Devon',   3, 200, '9952', '07/16/91') 4> insert employee values ('3', 'Frac', 'F', 'Chang',   4, 227, '9952', '11/03/90') 5> insert employee values ('4', 'Like', 'A', 'Lebihan', 5, 175, '0736', '06/03/90') 6> insert employee values ('5', 'Paul', 'X', 'Henriot', 5, 159, '0877', '08/19/93') 7> insert employee values ('6', 'Sick', 'K', 'Ottlieb', 5, 150, '1389', '04/05/91') 8> insert employee values ('7', 'Rita', 'B', 'Muller',  5, 198, '1622', '10/09/93') 9> insert employee values ('8', 'Mary', 'J', 'Pontes',  5, 246, '1756', '03/01/89') 10> insert employee values ('9', 'Jane', 'Y', 'Labrune', 5, 172, '9901', '05/26/91') 11> insert employee values ('10','Carl', 'F', 'Hernadez',5, 211, '9999', '04/21/89') 12> GO (1 rows affected) (1 rows affected) (1 rows affected) (1 rows affected) (1 rows affected) (1 rows affected) (1 rows affected) (1 rows affected) (1 rows affected) (1 rows affected) 1> 2> CREATE TABLE jobs( 3>    job_id         smallint          IDENTITY(1,1) PRIMARY KEY CLUSTERED, 4>    job_desc       varchar(50)       NOT NULL      DEFAULT 'New Position - title not formalized yet', 5>    min_lvl        tinyint           NOT NULL      CHECK (min_lvl >= 10), 6>    max_lvl        tinyint           NOT NULL      CHECK (max_lvl <= 250) 7> ) 8> GO 1> 2> 3> insert jobs values ('Coder',          10,  10) 4> insert jobs values ('Tester',         200, 250) 5> insert jobs values ('Programmer',     175, 225) 6> insert jobs values ('Painter',        175, 250) 7> insert jobs values ('Drawer',         150, 250) 8> insert jobs values ('Editor',         140, 225) 9> insert jobs values ('Manager',        120, 200) 10> insert jobs values ('Manager',        100, 175) 11> insert jobs values ('Representative', 25,  100) 12> insert jobs values ('Designer',       25,  100) 13> 14> GO (1 rows affected) (1 rows affected) (1 rows affected) (1 rows affected) (1 rows affected) (1 rows affected) (1 rows affected) (1 rows affected) (1 rows affected) (1 rows affected) 1> 2> CREATE TRIGGER employee_insupd 3> ON employee 4> FOR insert, UPDATE 5> AS 6>  7> declare @min_lvl tinyint, @max_lvl tinyint, @emp_lvl tinyint, @job_id smallint 8>   select @min_lvl = min_lvl, @max_lvl = max_lvl, @emp_lvl = i.job_lvl, @job_id = i.job_id 9> from employee e, jobs j, inserted i 10> where e.emp_id = i.emp_id AND i.job_id = j.job_id 11> IF (@job_id = 1) and (@emp_lvl <> 10) 12> begin 13>    raiserror ('Job id 1 expects the default level of 10.',16,1) 14>    ROLLBACK TRANSACTION 15> end 16> ELSE 17> IF NOT (@emp_lvl BETWEEN @min_lvl AND @max_lvl) 18> begin 19>    raiserror ('The level for job_id:%d should be between %d and %d.', 20>       16, 1, @job_id, @min_lvl, @max_lvl) 21>    ROLLBACK TRANSACTION 22> end 23> 24> GO 1> 2> drop table employee; 3> drop table jobs; 4> GO 1> 2>