• 售前

  • 售后

热门帖子
入门百科

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

[复制链接]
柳芽2017 显示全部楼层 发表于 2021-10-26 13:29:10 |阅读模式 打印 上一主题 下一主题
起首,啰嗦几句废话如下:
  (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表即可。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作