触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。SQL3的触发器是一个能由系统自动执行对数据库修改的语句。
触发器与存储过程的唯一区别是触发器不能执行EXECUTE语句调用,而是在用户执行Transact-SQL语句时自动触发执行。(摘自百度百科)
触发器的基本语法
查看当前数据库的触发器列表
select * from sysobjects where xtype='TR'
xtype 类型对照
C | CHECK 约束 |
D | 默认值或 DEFAULT 约束 |
F | FOREIGN KEY 约束 |
L | 日志 |
FN | 标量函数 |
IF | 内嵌表函数 |
P | 存储过程 |
PK | PRIMARY KEY 约束(类型是 K) |
RF | 复制筛选存储过程 |
S | 系统表 |
TF | 表函数 |
TR | 触发器 |
U | 用户表 |
UQ | UNIQUE 约束(类型是 K) |
V | 视图 |
X | 扩展存储过程 |
创建触发器
create trigger 触发器名称 on 表名 for insert(ipdate 或 delete) as T-SQL 语句
修改触发器
alter trigger 触发器名称 on 表名 for insert(ipdate 或 delete) as //要修改的T-SQL 语句
删除触发器
drop trigger 触发器名称
查看触发器的内容
exec sp_helptext '触发器名称'
重命名触发器
exec sp_rename 原名称, 新名称
禁用触发器
alter table 表名 disable trigger 触发器名称
启用触发器
alter table 表名 enable trigger 触发器名称
一个完整的触发器实例
当SO_Master表中有某个数据删除操作时,触发器将记录被删除的信息,以及客户端主机名称、IP地址、用户名、登录时间等相关信息到DeletedBU表中
alter trigger TriDeleted --触发器名称为 TriDeleted on SO_Master --触发器关联的表为 SO_Master for delete --删除触发 as declare @info nvarchar(100) --拼接被删除的信息 select @info=ORDNUM+LINNUM+DELNUM from deleted --(deleted表就相当于SO_Master表中要删除的那一列) if @info<>'' begin --客户端主机名称,客户端IP地址,当前数据库引擎用户名,当前登录时间 declare @ipAddress nvarchar(15),@loginName nvarchar(10),@hostName nvarchar(10),@loginTime datetime select @ipAddress=client_net_address from sys.dm_exec_connections where Session_id = @@SPID Select @loginTime=Login_Time,@hostName=HostName,@loginName=LogiName from SysProcesses Where SPID=@@SPID --将SO_Master表中被删除的信息,以及客户端相关信息插入记录表中 insert into DeletedBU values(@info,@loginName,@hostName,@ipAddress,@loginTime) end go
本文借鉴自:http://www.cnblogs.com/albert-struggle/archive/2011/08/10/2133665.html