• 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

  • 相关阅读:
    刨析js代码执行机制
    H5离线缓存基础系列
    meta 详解
    如何成长为一名合格的web架构师?
    整理的互联网公司面试趋势
    http协议
    前端现在到底需要什么样的人才
    webpack 4.0 版本的简单使用
    vue的懒加载如何实现?
    Runtime的几个小例子(含Demo)
  • 原文地址:https://www.cnblogs.com/tracine0513/p/4028319.html
Copyright © 2020-2023  润新知