首页 > 代码库 > SQL Server 触发器

SQL Server 触发器

触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。SQL3的触发器是一个能由系统自动执行对数据库修改的语句。

触发器与存储过程的唯一区别是触发器不能执行EXECUTE语句调用,而是在用户执行Transact-SQL语句时自动触发执行。(摘自百度百科)
 
触发器的基本语法
查看当前数据库的触发器列表
select * from sysobjects where xtype=TR
其中 sysobjects 保存着数据库的对象,其中 xtype 为 TR 的记录即为触发器对象。
xtype 类型对照
CCHECK 约束
D默认值或 DEFAULT 约束
FFOREIGN KEY 约束
L日志
FN标量函数
IF内嵌表函数
P存储过程
PKPRIMARY KEY 约束(类型是 K)
RF复制筛选存储过程
S系统表
TF表函数
TR触发器
U用户表
UQUNIQUE 约束(类型是 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 --触发器名称为 TriDeletedon 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)    endgo

 本文借鉴自:http://www.cnblogs.com/albert-struggle/archive/2011/08/10/2133665.html

 

 

 

SQL Server 触发器