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 类型对照
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

 

posted @ 2014-10-16 11:06  Tracine0513  阅读(197)  评论(0编辑  收藏  举报