登录触发器会相应login事件并自动执行,与 SQL Server 实例建立用户会话时将引发此事件。登录触发器将在登录的身份验证阶段完成之后且用户会话实际建立之前激发。因此,来自触发器内部且通常将到达用户的所有消息(例如错误消息和来自print语句的消息)会传送到 SQL Server 错误日志。如果身份验证失败,将不激发登录触发器。
2. 编写触发器
2.1. 语法
1
2
3
4
createtrigger tr_name
on 表名 forupdate|insert|deleteas
执行代码...
2.2. 示例代码
inster:
1
2
3
4
5
6
7
8
9
10
11
12
13
createtrigger tri_insert
on student
forinsertasdeclare@student_idchar(10)
select@student_id=s.student_id from students
innerjoin insertedion s.student_id=i.student_id
if@student_id='0000000001'begin
raiserror('不能插入1的学号!',16,8)
rollbacktran
endgo
update:
1
2
3
4
5
6
7
8
9
10
createtrigger tri_update
on student
forupdateasifupdate(student_id)
begin
raiserror('学号不能修改!',16,8)
rollbacktran
endgo
delete:
1
2
3
4
5
6
7
8
9
10
11
createtrigger tri_delete
on student
fordeleteasdeclare@student_idvarchar(10)
select@student_id=student_id from deleted
if@student_id='admin'begin
raiserror('错误',16,8)
rollbacktran
end