sql server update触发器_SQL Server 触发器

T-SQL 触发器

触发器分为

BEFORE触发器*(SQL Server不支持,Oracle支持)在事件发生时触发。

AFTER触发器是 SQLServer生成的最初用于自动相应数据修改的机制。在 SQLServer200以前的版本中 AFTER触发器是唯一的触发器,因此不用指明 AFTER,也可以用 FOR代替,该种触发器的行为是在事件之后执行

SQLServer2000中新增了 INSTEAD OF触发器该触发器执行某项操作,而不是触发这个触发器的操作

AFTER触发器

AFTER触发器是默认的触发器类型,因此关键字AFTER可以选。

CREATE TRIGGER trigger_name

ON table_name

AFTER {INSERT | UPDATE | DELETE }

AS

BEGIN

-- SQL statement

END

GO

案例

  在pubs数据库中生成一个触发器,打印一条消息,表示UPDATE Commands语句更新的数据行数。

USE pubs; -- 选择pubs数据库。

GO

CREATE TRIGGER tr_cmd_upd ON dbo.Commands

AFTER UPDATE

AS

BEGIN

PRINT 'Trigger Output '+CONVERT(VARCHAR(5),@@ROWCOUNT)+' rows were updated.';

END

GO

-- 执行一条语句,查看触发器是否生效。

UPDATE dbo.commands

SET title=title

WHERE ID = 4;

GO

INSERTED表和DELETED表

在大多数触发器情况下,需要知道数据修改中发生了什么变化,可以在INSERTEDDELETED表中找到这个信息。

案例:

SELECT * INTO commands_copy FROM commands;

GO

CREATE TRIGGER tr_cc ON dbo.commands_copy

FOR INSERT, UPDATE, DELETE

AS

BEGIN

PRINT 'Inserted:';

SELECT ID, Type, Platform FROM INSERTED;

PRINT 'Deleted:';

SELECT ID, Type, Platform FROM DELETED;

END

语句INSERTED的内容DELETED内容
INSERT增加的行
UPDATE新行旧行
DELETE删除的行

检查列更新

INSERT或者UPDATE触发器内可以使用UPDATE()函数。

使用UPDATE()函数检查INSERTUPDATE操作对数据列的影响。

CREATE TRIGGER tr_ins_upd ON dbo.commands_copy

FOR INSERT, UPDATE

AS

BEGIN

IF(UPDATE(ID))

BEGIN

RAISERROR('You can not change the ID.', 15, 1);

END

END

执行

-[ ] 执行AFTER触发器之前发生的事件。

  • 限制处理 -- 包括检查限制,唯一限制和主键限制。

  • 声明式引用 -- 这些操作是外部键限制定义的,保证表间的正确关系。

  • 触发操作 -- 即触发触发器的数据修改操作。这项操作发生在触发器执行之前,但结果要等到完成触发器操作之后才提交到数据库。

  • 触发顺序

  • 可以有多个对应于INSERTUPDATEDELETE的触发器,SQL Server可以指定第一个和最后一个触发器,但中间的触发器顺序则无法确定。

  • 触发顺序

  • SP_SETTRIGGERORDER过程是设置触发器顺序的工具。

  • 格式:

    SP_SETTRIGGERORDER trigger_name, 顺序,'操作'./*其中,顺序为[First | Last | None]   操作为[Insert | Update | Delete]*/

    例如:

  • SP_SETTRIGGERORDER tr_cmd_upd, FIRST, 'UPDATE';
  • 建议尽量不要对同一个表的同一事件定义多个触发器,可以把相关的操作定义到一个触发器中。

特殊考虑

AFTER触发器可以用于具有级联参照完整性限制的表格中。

WRITETEXT与TRUNCATE TABLE不触发触发器。

触发器是对象,因此要在数据库中有唯一的名称。

AFTER触发器的限制

AFTER触发器只能用于表,不能用于视图。

一个AFTER触发器不能用在多个表上。

TEXT, NTEXT与IMAGE列不能引用AFTER触发器。

INSTEAD OF 触发器

  1.  SQL Server 2000引入新的Instead of 触发器。

  2. Instead of 的含义:该触发器执行某项操作,而不是触发这个触发器的操作。

  3. 什么时候使用Instead of触发器。

    3.1. 数据库里的数据禁止修改。

    3.2. 有可能要回滚修改的SQL语句。

    3.3. 在视图中使用的触发器,AFTER触发器不能在视图中使用。

    3.4. 控制数据的修改方式和流程。

ab314c808f817e7fb97c3afa40b671ed.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/271089.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS 公司开发者账号申请

对于独立开发者很有用,收藏起来,以备不时之需! 苹果开发者账号分三种。 个人账号:个人申请用于开发苹果app所使用的账号,仅限于个人使用,申请比较容易,$99。 公司账号:以公司的名义申请的开发者账号,用于公…

php渲染视图,Laravel 视图渲染:Blade 模板引擎

Laravel 视图渲染:Blade 模板引擎由 学院君 创建于3年前, 最后更新于 2年前版本号 #153378 views27 likes0 collectsBlade 简介Blade 是由 Laravel 提供的非常简单但功能强大的模板引擎,不同于其他流行的 PHP 模板引擎,Blade 在视图中并不约束…

项目管理基础:系统切换相关知识笔记

1、系统试运行主要任务对新系统进行初始化、补录各种原始数据记录记录系统运行过程中的数据和状况核对新旧系统输出结果是否正确对实际系统的输入方式进行考察主要包括是否方便、效率、可靠性、误操作保护等方面。对系统实际运行、响应速度进行实际测试,确定是否满足…

sql 分组统计_leetcode-sql面试题十七篇精讲合集

这可能是全网最干货的sql讲解系列文章。全系列共十七讲。做了大量的知识点的拓展,涵盖了sql的方方面面。欢迎关注点赞收藏,正在整理三年数据分析的点点滴滴。包括Excel、python、sql、power BI、各种分析模型框架。保证输出最干的干货。涉及知识点包括&a…

项目管理基础:系统维护相关知识笔记

1、系统的可维护性系统的可维护性就是项目维护人员理解、改正、改动和改进该软件的难易程度。提高系统的可维护性是开发软件吸引所有步骤的关键目的,系统能否被很好地维护,可用系统的可维护性这一指标来衡量。1.1 系统可维护性的评价指标可理解性&#x…

一个栈桢对应着一个方法

一个栈桢对应着一个方法

程序员幽默:39个奇葩代码注释,每一个都能笑抽

1. 只有上帝知道//我写这一行的时候,只有上帝和我知道我在写什么//现在,只有上帝知道了2. 相隔时空的diss//somedev1 - 6/7/02 添加对登录屏幕的暂时追踪功能//somedev2 - 5/22/07 暂时个屁(仿佛看到两个程序员相隔时空的diss)3…

栈出现的异常和设置栈的大小-Xss

异常 java.lang.StackOverflowError 看下面的例子,默认的栈内存 设置栈内存 使用参数-Xss大小来设置栈的大小

项目管理基础:系统评价相关知识

1、概念软件系统的评价分为广义评价和狭义评价。广义评价:主要是指系统从开发开始到结束的过程中,每个阶段都要进行系统评价。狭义评价:主要是指在系统建成后并投入运行之后进行全面、综合的评价。2、广义评价分类根据时间与软件系统所处的阶…

AutoHotKey程序防止反编译的简单手段

可以使用AutoHotKey自带的工具。 AutoHotKey安装完成后(我使用的是1.1.0.0),找到安装所在目录下的文件:\Compiler\Ahk2Exe.exe。 程序界面如下: 简单使用: 1、选择源文件(script file) 2、选择目…

table合并单元格_制作课程表3——合并单元格

由于浏览器兼容问题,、 以及 很少被使用,所以我们将课程表依然使用tr、td元素,结合样式实现出前面案例中效果原来代码:课程1 课程2 课程3 课程4 课程5 课程1 课程2 课程3 课程4 课程5 课程1 课程2 课程3 课程4 课程5 课程1 …

数据库设计:数据库应用系统的生命周期

数据库应用系统的生命周期可以划分为:数据库规划、需求描述与分析、数据库与应用程序设计、数据库设计实现、数据库测试、数据库运维。1、数据库规划 数据库规划是创建数据库应用系统的第一步,也是数据库应用系统的任务描述和目标的明确。数据库规划的内…

从零开始,做一个NodeJS博客(四):服务器渲染页面与Pjax

标签: NodeJS 0 一个星期没更新了 一直在忙着重构代码,以及解决重构后出现的各种bug 现在CSS也有一点了,是时候把遇到的各种坑盘点一下了 1 听歌排行 API 修复与重构 1.1 修复 在加载云音乐听歌排行的时候,有时会出现一个奇怪的…

java 简单事件的使用,如何正确的使用Java事件通知(1)

如何正确的使用Java事件通知(1)通过实现观察者模式来提供 Java 事件通知(Java event notification)似乎不是件什么难事儿,但这过程中也很容易就掉进一些陷阱。本文介绍了我自己在各种情形下,不小心制造的一些常见错误。Java 事件通知让我们从一个最简单的…

Java 自动装箱与拆箱

Java 自动装箱与拆箱 装箱就是自动将基本数据类型转换为包装器类型(int–>Integer);调用方法:Integer 的 valueOf(int) 方法 拆箱就是自动将包装器类型转换为基本数据类型(Integer–>int)。调用方法…

基本系统设备感叹号_win7系统网络图标显示感叹号的问题

有系统之家的小伙伴,在使用win764位纯净版系统上网的时候,出现网络图标显示感叹号的问题。这种问题我们可以通过在网络检测修复中进行自行检测。或者是检查一下是不是硬件设备的问题。详细解决步骤就来看下系统哥小编是怎么做的吧~win7 64系统无法上网显…

硬件编程:STM32串口发送数据和接收数据方式总结!

串口发送数据1、串口发送数据最直接的方式就是标准调用库函数 。void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);第一个参数是发送的串口号,第二个参数是要发送的数据,但是用过的朋友应该觉得不好用,一次只能发送单个字符&#…

Java编程题修院子,了解java虚拟机—JVM相关参数设置(2)

1. JVM相关参数设置JVM相关配置-XX:PrintGC两次次YoungGC,两次FullGC。-XX:PrintGCDetails打印GC时的内存,并且在程序结束时打印堆内存使用情况-XX:PrintHeapAtGC每次GC时会分别打印回收前与回收后堆信息-XX:PrintGCTimeStamps选择打印GC的方式后&…