当前位置:  数据库>sqlserver

简单触发器的使用 献给SQL初学者

    来源: 互联网  发布时间:2014-10-04

    本文导语:  首先,啰嗦几句废话如下:   (1)触发器(trigger)是个特殊的存储过程,它的执行并不需要我们去显式调用,而是由一些事件触发,这有点类似C#中的事件处理机制。当使用UPDATE,INSERT  或DELETE的一种或多种对指定的数...

首先,啰嗦几句废话如下:
  (1)触发器(trigger)是个特殊的存储过程,它的执行并不需要我们去显式调用,而是由一些事件触发,这有点类似C#中的事件处理机制。当使用UPDATE,INSERT  或DELETE的一种或多种对指定的数据库的相关表进行操作时,会触发触发器。
  (2)触发器可以包含复杂的SQL语句,主要用于强制复杂的业务规则或要求。
  (3)触发器能够维持数据库的完整性,当执行插入、更新或删除操作时,触发器会根据表与表之间的关系,强制保持其数据的完整性。
  
  好,啰嗦完了开始贴代码,首先贴上我创建的两张表所包含的列,他们的关联关系是1对多,以UserID进行关联。


然后来一个非常简单的触发器
代码如下:

IF EXISTS(SELECT * FROM sysobjects
WHERE name='tr_Users_OnUpdate' AND TYPE='TR')
DROP TRIGGER tr_Users_OnUpdate
GO --这里呢创建触发器与存储过程类似(都是DDL)
--先判断如否存在同名触发器就删除然后重建
CREATE TRIGGER tr_Users_OnUpdate
ON Users FOR UPDATE
AS PRINT ‘Users表已发生修改'
GO

上述代码中,tr_Users_OnUpdate为触发器名称,Users为表名。这触发器的作用是当向Users表执行Update时将打印“Users表已发生修改”。
  好了我们可以看到这个触发器的实用性不是很大,那么接下来呢我们再来学习下关于触发器里两种特殊的表“inserted”和“deleted”。这两张表主要用于触发器。Deleted 表用于存储 执行DELETE 和 UPDATE操作时所影响的行的副本。而Inserted 表则用于存储 INSERT 和 UPDATE 语句所影响的行的副本。那么我们看到执行UPDATE操作时都会有记录分别存储到“inserted”和“deleted”。其实理解起来不难deleted表存储的是Update之前的记录,而inserted存储的呢则是Update之后的记录,这里关于理论性东西我不再赘述,官方资料有更详细说明。
  现在我们要做的就是本文的重点,当往WordInfo添加一条记录时,使用触发器使UserInfo的相应记录的LeaveCount字段增加1。代码如下:
代码如下:

--添加留言的触发器
IF EXISTS(SELECT name FROM sysobjects WHERE name='tr_LeaveWord_Add' AND TYPE='TR')
DROP TRIGGER tr_LeaveWord_Add
GO
CREATE TRIGGER tr_LeaveWord_Add
ON WordInfo FOR INSERT
AS UPDATE UserInfo SET LeaveCount=LeaveCount+1
WHERE UserID=(SELECT TOP 1 UserID FROM Inserted)
GO

OK,到这里就可以收工了,值得注意的是如果触发器是UPDATE触发的,那么在执行Update后再查询更新之前的数据改成查询deleted表即可。

    
 
 

您可能感兴趣的文章:

  • sql server 触发器实例:特定字段更新时触发Update触发器
  • SQL Server 触发器 表的特定字段更新时,触发Update触发器
  • sqlserver 禁用触发器和启用触发器的语句
  • MySQL与SQL的触发器的不同写法 iis7站长之家
  • 判断触发器正在处理的是插入,删除还是更新触发
  • sql server 禁用与启用触发器的语句
  • Oracle 触发器的使用小结
  • sql server 触发器实例 创建、删除、修改、查看触发器的例子
  • SQL2000能不能够象Access2000那样自动编号?(用触发器行不行?如何做?)
  • mysql 触发器实现两个表的数据同步
  • 查看数据库中所有触发器的sql语句
  • sql update 触发器 可获得被update的行的信息
  • MySQL与SQL的触发器的不同写法
  • MySQL触发器学习总结
  • ORACLE PL/SQL 触发器编程篇介绍
  • sqlserver触发器与游标的例子
  • sql server 触发器实例分享(1)
  • SQLServer EVENTDATA()函数来获取DDL 触发器信息
  • Oracle触发器修改同一表不同字段
  • sql server 触发器实例(判断是插入、删除,还是修改)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • sql server触发器的简单例子
  • Oracle创建主键自增表(sql语句实现)及触发器应用
  • Oracle中使用触发器(trigger)和序列(sequence)模拟实现自增列实例
  • 对有insert触发器表取IDENTITY值时发现的问题
  • sql server添加、更新、删除触发器的例子
  • 使用sql脚本创建触发器的例子
  • 如何测试mysql触发器和存储过程
  • sql不常用函数总结以及事务,增加,删除触发器
  • MySQL 5.0触发器参考教程第1/4页
  • SqlServer实现类似Oracle的before触发器示例
  • sql 触发器使用例子
  • MYSQL设置触发器权限问题的解决方法
  • 用sql脚本创建sqlserver数据库触发器范例语句
  • SQLServer 触发器 数据库进行数据备份
  • sqlserver 触发器学习(实现自动编号)
  • sql server 触发器对数据库进行数据备份的例子
  • sql server触发器学习总结及自动编号的例子
  • sql server跨服务器触发器的例子
  • SQLServer2005触发器提示其他会话正在使用事务的上下文的解决方法
  • Mysql中的触发器简单介绍及使用案例


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3