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

 更新时间:2011年09月13日 21:51:24   作者:  
简单触发器的使用 献给SQL初学者,使用sqlserver的朋友可以参考下。
首先,啰嗦几句废话如下:
  (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中聚合函数的用法

    SQL Server中聚合函数的用法

    本文详细讲解了SQL Server中聚合函数的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • SQL Server 2008 R2安装教程及错误解决方案详细教程

    SQL Server 2008 R2安装教程及错误解决方案详细教程

    这篇文章主要介绍了安装SQL Server 2008 R2的步骤,并列举了几个常见的错误及其解决方法,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2025-02-02
  • 修复断电等损坏的SQL 数据库

    修复断电等损坏的SQL 数据库

    修复断电等损坏的SQL 数据库,不论因为哪种原因,大家都可以测试下,试试。
    2009-08-08
  • SQL Server 比较日期大小的方法

    SQL Server 比较日期大小的方法

    这篇文章介绍了SQL Server 比较日期大小的方法,有需要的朋友可以参考一下
    2013-09-09
  • sqlserver 常用存储过程集锦

    sqlserver 常用存储过程集锦

    常用存储过程集锦,都是一些mssql常用的一些,大家可以根据需要选择使用。
    2009-09-09
  • sql 时间函数 整理的比较全了

    sql 时间函数 整理的比较全了

    sql 时间函数,需要的朋友可以参考下。
    2009-11-11
  • MSSQL内外连接(INNER JOIN)语句详解

    MSSQL内外连接(INNER JOIN)语句详解

    这几天重新温习了一下SQL的书本,现在的思路应该是很清楚了,现在把自己的理解发出来给大家温习下。希望和我一样对SQL的连接语句不太理解的朋友能够有所帮助
    2006-11-11
  • SQLite如何修改字段类型

    SQLite如何修改字段类型

    这篇文章主要介绍了SQLite修改字段类型的方法,SQLite不支持直接修改字段类型,如需要修改字段类型,本文给大家分享相关方法处理,需要的朋友可以参考下
    2024-07-07
  • SQL语句的各个关键字的解析过程详细总结

    SQL语句的各个关键字的解析过程详细总结

    由于最近需要做一些sql query性能提升的研究,因此研究了一下sql语句的解析过程;本文是我在看了各种资料后手机总结的,会详细的,一步一步的讲述一个sql语句的各个关键字的解析过程,欢迎大家互相学习
    2013-01-01
  • SQL Server常用管理命令小结

    SQL Server常用管理命令小结

    需要管理sql server的朋友,需要掌握的,大家可以收藏下,方便以后使用
    2008-09-09

最新评论