Sqlserver 触发器的使用

说到触发器,个人感觉也不是多太常用,那什么时候要用到触发器呢?触发器又有哪些有优点呢?

个人理解触发器的优点无非有3种(个人理解,仅供参考):

1,自动性:也就是说我在A表上建了一个触发器,如果我在A表中插入,修改,或者删除一条数据,那么触发器就会自动触发了。

2,层叠修改:比如我在A表插入一条数据,那么我可以操作与A表相关联的其他表,可以删除或更新包含外键关系中所涉及的数据的所有行。

3,强制限制:也就是可以做判断,if  什么  else 什么。

触发器到底有几种呢?我记得刚开始学如何使用触发器的时候,百度上写了一大堆,其实归结起来也就三种:

UPDATE:更新

DELETE:删除

INSERT:插入

上面介绍了触发器的基本用途和信息,具体如何运用,我就举一个简单的小例子吧!

我们就以仓库的出库和入库具体吧!首先我们要建两个表一个是仓库出入库记录表(记录每一笔出货,入货记录):StockDetail,一个是库存总表(记录仓库目前各种货物的总数):StockSum

StockDetail 表中:StockDetailID:主键   StockCount:出入货物数量   InOrOut:出入库标志 0代表出库,1代表入库 GoodsType: 商品种类。

StockSum 表中:StockSumID:主键    Sum:每种商品的中数量   GoodsType:商品种类。

下面我们就模拟一个入库操作,就以StockDetail 表中第三条数据为例。(第三条数据表示想仓库中的商品种类2入库40)

首先我们要建一个触发器,如何建看下图:

右击,选择新建触发器就可以了。

下面是触发器sql代码:

USE [MyData]
GO
/****** Script Date: 2020/1/5 星期日 16:44:01 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

create TRIGGER [dbo].[Tr_StockDetail]
   ON [dbo].[StockDetail]
   AFTER  INSERT
AS
DECLARE @StockCount INT,
        @InOrOut INT,
        @GoodsType intBEGIN

    SET NOCOUNT ON;
    SELECT @StockCount=StockCount,@InOrOut=InOrOut,@GoodsType=GoodsType  FROM INSERTED
     if @InOrOut=1
        update StockSum set Sum=SUM+@StockCount where GoodsType=@GoodsType
     else
       update StockSum set Sum=SUM-@StockCount where GoodsType=@GoodsType

END

那接下我们按要求执行一次入库操作:

insert into [MyData].[dbo].[StockDetail]
  (
      [StockCount]
      ,[InOrOut]
      ,[GoodsType]
  )values
  (
  40,
  1,
  2
  )

没有执行入库操作前两个表的情况:

执行操作后两个表的情况:

对比一下是不是变了,入库记录多一条的同时,库存商品类型2加个30个商品。

个人感觉,用触发器其实真没多大必要,像这种逻辑操作,我一个存储过程就搞定了,感觉真实没必要用触发器。再说用触发器,在后期维护的时候很容易被遗忘,尤其是前一个人交接给后一个人的工作,用触发器操作数据库,很难找。我深有体会,真他妈太苦逼了!

原文地址:https://www.cnblogs.com/zpy1993-09/p/12152971.html

时间: 2024-10-21 08:13:49

Sqlserver 触发器的使用的相关文章

一次SQLSERVER触发器编写感悟

背景:BOSS须要我写一个工厂採集端到服务器端的数据同步触发器,数据库採用的是sqlserver2008 需求:将多台採集机的数据同步到server中,假设採集端数据库与server数据库连接失败则将数据保存到记录表中 前期思路:从採集端创建server端的数据库链接,通过採集端的insert,update触发.同一时候往远程表写入 问题:因为初始接触sqlserver.对sqlserver触发器了解不深.查阅一些资料后写出了满足正常情况下(连接服务器数据库正常)的触发器. create tri

sqlserver 触发器实例

实例1:update USE [数据库名称]GO/****** Object: Trigger [dbo].[触发器名称] Script Date: 05/08/2014 12:40:25 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER TRIGGER [dbo].[T_触发器名称] ON [dbo].[表名称] FOR UPDATEAS DECLARE @Id VARCHAR(32), @remain_cost DECIMAL

SqlServer——触发器

一:触发器基本知识  触发器是一种特殊的存储过程,但没有接口(输入输出参数),触发器是引发它们的事务的一部分,因为SqlServer自动将引发它们的SQL语句和触发器作为一个隐式事务,因此当触发器正确执行后,事务才认为是完整的,触发器也可已在触发器内部通过 rollback tran 来回滚事务,当触发的SQL语句是隐式事务时,只回滚引发触发器的SQL语句和触发器:是显式事务时,将撤销从最外层 begin tran 开始的所有操作.所以触发器通常用来实现对表实施复杂的完整性约束和强制业务规则,它

SQLServer 触发器入门

阅读目录 一:触发器的优点 二:触发器的作用 三:触发器的分类 四:触发器的工作原理 五:创建触发器 六:管理触发器 概念:   触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,当对一个表进行操作( insert,delete, update)时就会激活它执行.触发器经常用于加强数据的完整性约束和业务规则等. 触发器可以从 DBA_TRIGGERS ,U

sqlserver 触发器

 何为触发器? 在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程,它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约束. SQL Server为每个触发器都创建了两个专用表:Inserted表和Deleted表.Deleted和Inserted分别代表出发事件的表“旧的一条记录”和“新的一条记录”.这两个表由系统来维护﹐它们存在于内存中而不是在数据库中.这两

SQLServer触发器

触发器的作用: 自动化操作,减少了手动操作以及出错的几率. 触发器是一种特殊类型的存储过程,它不同于前面介绍过的一般的存储过程. [在SQL内部把触发器看做是存储过程但是不能传递参数] 一般的存储过程通过存储过程名称被直接调用,而触发器主要是通过事件进行触发而被执行. 触发器是一个功能强大的工具,在表中数据发生变化时自动强制执行. 触发器可以用于SQL Server约束.默认值和规则的完整性检查,还可以完成难以用普通约束实现的复杂功能. 那究竟何为触发器?在SQL Server里面也就是对某一个

SQLServer 触发器初探

继上次的SQL Server空间化任务之后, 笔者又接到新的任务: 当数据库属性字段发生变化时,在不改变业务代码的条件下,自动更新空间数据. 首先想到的解决方案就是触发器. 基本思路: 在数据更新或插入完毕之后,当表的x,y字段任意一个的值发生变化时,即开始更新空间字段数据. 下面以摄像机表videopointinfo为例 字段 类型 说明 videoid varchar 主键ID videoname varchar 摄像机名 clientx number 经度 clienty number 纬

SQLServer触发器的使用

创建: [sql] view plain copy create trigger trigger_name on {table_name view_name} {for After Instead of } [ insert, update,delete ] as sql_statement 删除触发器: [sql] view plain copy drop trigger trigger_name 查看数据库中已有触发器: [sql] view plain copy use jxcSoftwa

sqlserver 触发器语法

语法:Trigger on an INSERT, UPDATE, or DELETE statement to a table or view (DML Trigger)CREATE TRIGGER [ schema_name . ]trigger_name ON { table | view } [ WITH <dml_trigger_option> [ ,...n ] ]{ FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] [

SqlServer触发器实现表的级联插入、级联更新

首先建立两张表,分别为test1与test2,期望在更改test1的时候,test2的相关记录能够同时做出更改.假定test1与test2的表结构相同,如下表所示 name age     触发器实现级联插入: create trigger test3 on test1 after insert as insert into test2 select name,age from inserted 触发器实现级联更新: create trigger test4 on test1 after upd