sqlserver 触发器示例
1--检查当前触发器是否已存在
2IF exists(SELECT*FROM sysobjects WHERE xtype='TR'AND [name]='TR_INSERTUserInfo_LoginLog')
3--存在即删除该触发器
4DROP TRIGGER TR_INSERTUserInfo_LoginLog
5go
6--触发器创建在UserInfo表上当对UserInfo表执行INSERT操作后自动执行触发器中的SQL语句
7CREATE TRIGGER TR_INSERTUserInfo_LoginLog
8ON UserInfo
9FOR INSERT
10AS
11BEGIN
12--定义接受新建用户ID的参数
13DECLARE@userID VARCHAR(50);
14--查询INSERTED临时表获取新建用户ID
15SELECT@userID=UserID FROM Inserted
16--向用户登录日志表中添加新建用户登录日志
17INSERT INTO LoginLog VALUES(@userID,getDate())
18END
19GO
20
21IF EXISTS(SELECT*FROM sysobjects WHERE xtype='TR'AND [name]='TR_Update_UserInfo_ManagerLog')
22DROP TRIGGER TR_Update_UserInfo_ManagerLog
23GO
24CREATE TRIGGER TR_Update_UserInfo_ManagerLog
25ON UserInfo
26FOR UPDATE
27AS
28--接受被更新用户信息的ID
29DECLARE@userId INT
30--接受更新前用户密码的变量
31DECLARE@oldPwd VARCHAR(50)
32--接受更新后用户密码的变量
33DECLARE@newPwd VARCHAR(50)
34--接受更新前用户邮件的变量
35DECLARE@oldEmail VARCHAR(50)
36--接受更新后用户邮件的变量
37DECLARE@newEmail VARCHAR(50)
38--从DELETED临时表中获取数据更新前用户数据
39SELECT@userId=UserId,@oldPwd=password,@oldEmail=Em ail FROM Deleted
40--从INSERTED临时表中获取数据更新后的用户数据
41SELECT@newPwd=password,@newEmail=Email FROM Inserte d
42--向系统日志表中插入数据
43INSERT INTO managerlog VALUES('修改ID为:['+CAST(@use rId AS VARCHAR(5))+']用户信息:<br/>Password:{'+@oldPwd+'}-
->Password:{'+@newPwd+'}<br/>Email:{'+@oldEmail+'}-->{'+@ newEmail+'}',getDate())
44Go
45
46
47--创建当用户表插入新数据时,添加工资表对应记录的触发器
48IF EXISTS(SELECT*FROM sysobjects WHERE[xtype]='TR'AN D[name]='Insert_Emp_EmpPayment')
49DROP TRIGGER Insert_Emp_EmpPayment
50go
51CREATE TRIGGER Insert_Emp_EmpPayment
52ON Employee1
53FOR INSERT
54AS
55DECLARE@empId INT
56SELECT@empId=EmpId FROM Inserted
57INSERT INTO EmpPayMent VALUES(@empId,800.00,null) 58go
59
60--创建当向工资表插入数据时,更新工资表中员工奖金
61IF EXISTS(SELECT*FROM sysobjects WHERE[xtype]='TR'AN D[name]='Insert_EmpPayment')
62DROP TRIGGER Insert_EmpPayment
63go
64CREATE TRIGGER Insert_EmpPayment
65ON EmpPayMent
66FOR INSERT
67AS
68DECLARE@empId INT
69SELECT@empId=EmpId FROM Inserted
70UPDATE EmpPayMent SET Bonus=50.00WHERE EmpID=@empId 71go。