首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SQL Server 触发器-如何安全地确定是由UPDATE还是DELETE触发?

在 SQL Server 中,您可以使用特殊的系统表 inserteddeleted 来确定触发器是由 UPDATE 还是 DELETE 操作触发的。

在触发器中,inserted 表包含了插入或更新的行,而 deleted 表包含了删除或更新前的行。通过检查这些表的行数,您可以确定触发器是由 UPDATE 还是 DELETE 操作触发的。

以下是一个示例触发器,它根据操作类型执行不同的操作:

代码语言:sql
复制
CREATE TRIGGER tr_Example
ON YourTable
AFTER UPDATE, DELETE
AS
BEGIN
    DECLARE @Operation VARCHAR(10)

    IF EXISTS(SELECT * FROM deleted) AND EXISTS(SELECT * FROM inserted)
    BEGIN
        SET @Operation = 'UPDATE'
    END
    ELSE IF EXISTS(SELECT * FROM deleted)
    BEGIN
        SET @Operation = 'DELETE'
    END
    ELSE
    BEGIN
        SET @Operation = 'INSERT'
    END

    IF @Operation = 'UPDATE'
    BEGIN
        -- 在此处执行 UPDATE 操作的逻辑
    END
    ELSE IF @Operation = 'DELETE'
    BEGIN
        -- 在此处执行 DELETE 操作的逻辑
    END
    ELSE
    BEGIN
        -- 在此处执行 INSERT 操作的逻辑
    END
END

在这个示例中,触发器会检查 deletedinserted 表中的行数,以确定触发器是由 UPDATE 还是 DELETE 操作触发的。然后,根据操作类型执行相应的逻辑。

请注意,这个示例中的触发器是在 AFTER 触发器上实现的,这意味着它会在 UPDATE 或 DELETE 操作完成后执行。如果您需要在操作发生之前执行某些操作,可以将触发器更改为 INSTEAD OF 触发器。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SQLServer 触发器

SQL Server 触发器 by:授客 QQ:1033553122 什么是触发器 1.触发器是对表进行插入、更新、删除操作时自动执行的存储过程 2.触发器通常用于强制业务规则 3.触发器是一种高级约束....是一个事务(可回滚,不能手动提交) 触发器的类型 delete触发器 当删除表中记录时触发,自动执行触发器所定义的SQL语句 insert触发器 当向表中插入数据时触发,自动执行触发器所定义的SQL...如何创建触发器 1.创建触发器的语法 create trigger trigger_name on table_name for [delete|insert|update] as t-sql语句 go...触发insert触发器,向系统临时表inserted表中插入新行的副本 3. 触发器检查inserted表中插入的新行数据,确定是搜需要回滚或执行其他操作。...UPDATE触发器除了跟踪数据的变化(修改)外,还可以检查是否修改了某列的数据 使用UPDATE(列)函数检测是否修改了某列 问题: 交易日期一般系统自动产生,默认为当前日期。

1.9K20

SQL Server 触发器

触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是程序调用,也不是手工启动,而是事件来触发,比如当对一个表进行操作...触发器经常用于加强数据的完整性约束和业务规则等。 SQL Server包括三种常规类型的触发器:DML触发器、DDL触发器和登录触发器。...登录触发器 登录触发器将为响应 LOGIN 事件而激发存储过程。与 SQL Server 实例建立用户会话时将引发此事件。登录触发器将在登录的身份验证阶段完成之后且用户会话实际建立之前激发。...因此,来自触发器内部且通常将到达用户的所有消息(例如错误消息和来自 PRINT 语句的消息)会传送到 SQL Server 错误日志。如果身份验证失败,将不激发登录触发器。...2.避免在触发器中做复杂操作,影响触发器性能的因素比较多(Eg:产品版本,所使用的架构等),要想编写高效的触发器考虑因素比较多,编写高性能触发器还是很难的。

2.7K10
  • 如何使用SQL语句创建触发器

    个人主页: :✨✨✨初阶牛✨✨✨ 推荐专栏1: C语言初阶 推荐专栏2: C语言进阶 个人信条: 知行合一 本篇简介:>记录SQL server触发器的创建语句,以及简单介绍....例如当对某一表进行诸如UPDATE(修改)、INSERT(插入)、DELETE(删除)这些操作时,SQL Server 就会自动执行触发器所定义的SQL语句,从而确保对数据之间的相互关系,实时更新. 1.2...、 触发器 的作用 触发器的主要作用就是其能够实现 主键 和 外键 所不能保证的复杂的参照完整性和数据的一致性。...三、 触发器 的种类 SQL Server 中一般支持以下两种类型的触发器: AFTER 触发器 AFTER 触发器 要求只有执行某一操作(INSERT、UPDATEDELETE)之后, 触发器...INSTEAD OF 触发器 表示并不执行其所定义的操作(INSERT、UPDATEDELETE),而仅是执行 触发器 本身。

    31010

    SQL Server触发器创建、删除、修改、查看示例步骤

    二﹕ SQL Server为每个触发器都创建了两个专用表﹕Inserted表和Deleted表。这两个表。...二﹕ SQL Server为每个触发器都创建了两个专用表﹕Inserted表和Deleted表。这两个表系统来维护﹐它们存在于内存中而不是在数据库中。...这两个表的结构总是与被该触发器作用的表的结构相同。触发器执行 完成后﹐与该触发器相关的这两个表也被删除。 Deleted表存放由于执行DeleteUpdate语句而要从表中删除的所有行。...三﹕Instead of 和 After触发器 SQL Server2000提供了两种触发器﹕Instead of 和After 触发器。...四﹕触发器的执行过程 如果一个Insert﹑update或者delete语句违反了约束﹐那幺After触发器不会执行﹐因为对约束的检查是在After触发器被激动之前发生的。

    1.3K30

    触发器创建删除等操作

    大家好,又见面了,我是全栈君 一、创建一个简单的触发器 触发器是一种特殊的存储过程,类似于事件函数,SQL Server™ 允许为 INSERT、UPDATEDELETE 创建触发器,即当在表中插入、...创建触发器用 CREATE TRIGGER CREATE TRIGGER 触发器名称 ON 表名 FOR INSERT、UPDATEDELETE AS T-SQL 语句 注意:触发器名称是不加引号的...三、重命名触发器 用查询分析器重命名 exec sp_rename 原名称, 新名称 sp_rename 是 SQL Server™ 自带的一个存储过程,用于更改当前数据库中用户创建的对象的名称,如表名...INSTEAD OF 执行触发器语句,但不执行触发触发器SQL 语句,比如试图删除一条记录时,将执行触发器指定的语句,此时不再执行 delete 语句。...九、触发器回滚 我们看到许多注册系统在注册后都不能更改用户名,但这多半是应用程序决定的, 如果直接打开数据库表进行更改,同样可以更改其用户名,在触发器中利用回滚就可以巧妙地实现无法更改用户名。

    1.6K20

    sql server 触发器

    触发器是一种特殊类型的存储过程。触发器可包含复杂的T-SQL语句。触发器不能通过名称被直接调用,也不允许设置参数。它是建立在触发事件上的。...| INSTEAD OF}    {[DELETE] [,][INSERT] [,] [UPDATE]}    AS    sql_statement […n ] }  其中: AFTER 指定触发器只有在触发...当在一个有UPDATE触发器的表中修改记录时,表中原来的记录被移动到deleted表中,修改过的记录插入到了插入表中,触发器可以参考deleted表和inserted表以及被修改的表,以确定如何完成数据库操作...}   { [ DELETE ] [ , ] [ INSERT ] [ , ] [ UPDATE ] } AS   sql_statement […n ]   }    DDL触发器使用 例如: 1...41 drop trigger trig_last on all server 删除触发器 使用SQL Server Management Studio删除触发器 使用DROP TRIGGER语句来删除触发器

    1.4K80

    【DB笔试面试448】Oracle中有哪几类触发器

    下面分别介绍这4类触发器。 1、DML触发器 DML触发器DML语句触发,例如,INSERT、UPDATEDELETE语句。...创建DML触发器的一般语法如下所示: CREATE [OR REPLACE] TRIGGER trigger_name {BEFORE | AFTER } {INSERT | DELETE | UPDATE...其实,该部分内容涉及到面试中的一个问题,那就是,“如何监控会话的登录登出情况?”,答案就是使用审计或系统触发器来实现。下面将详细讲解该部分的内容。 系统触发器可以在DDL或数据库系统上被触发。...其错误代码可以使用触发器内部的SERVER_ERROR属性函数取出。该函数可以让用户确定堆栈中的错误码。...l 在触发器的执行部分只能使用DML语句(例如SELECT、INSERT、UPDATEDELETE等),不能使用DDL语句(例如CREATE、ALTER、DROP等)。

    2K10

    MySQLMariaDB触发器详解

    其中before触发器类似于SQL Server中的instead of触发器,作用在检查约束之前。而after触发器SQL Server中一样,在检查约束之后才生效。...下图为SQL Server中instead of和after触发器的工作位置。...在MySQL/MariaDB中是一样的,只要把MySQL/MariaDB中的概念和SQL Server中的概念对应起来即可。后文中有对该图的分析。...在MySQL/MariaDB中,使用old和new表分别表示触发器激活后的新旧表,在SQL Server中使用的是inserted和deleted表,其实它们的意义是等价的。...且无论是before还是after insert触发器都有new表的存在。 在mariadb 10.2.3版本之后,一个表中可以为同一时间、同一事件创建多个触发器(在mysql中不允许)。

    1.8K20

    ORACLE触发器具体解释

    8.1 触发器类型 触发器在数据库里以独立的对象存储,它与存储过程和函数不同的是,存储过程与函数须要用户显示调用才执行,而触发器一个事件来启动执行。...l 触发事件:引起触发器触发的事件,即DML操作(INSERT、UPDATEDELETE)。...DELETING:当触发事件是DELETE时,则取值为TRUE,否则为FALSE。 解发对象:指定触发器是创建在哪个表、视图上。 l 触发类型:是语句级还是行级触发器。...因为在PL/SQL块中不能直接调用DDL语句,所以,利用ORACLE内置包DBMS_UTILITY中的EXEC_DDL_STATEMENT过程,它运行DDL语句创建触发器。...因为在PL/SQL块中不能直接调用DDL语句,所以,利用ORACLE内置包DBMS_UTILITY中的EXEC_DDL_STATEMENT过程,它运行DDL语句创建触发器

    1.1K30

    探索SQL Server元数据(二)

    背景   上一篇中,我介绍了SQL Server 允许访问数据库的元数据,为什么有元数据,如何使用元数据。这一篇中我会介绍如何进一步找到各种有价值的信息。以触发器为例,因为它们往往一起很多问题。...那么如何找到触发器的数据?   以sys.system_viewsis表开始。让我们查询出数据库中使用触发器的信息。可以告知你当前SQL Server版本中有什么触发器。...普通的DML触发器能被定义来执行替代一些数据修改(Insert,Update或者Delete)或者在数据修改之后执行。每一个触发器与只与一个对象管理。...两种触发器都与事件相关,在DML触发器中,包含INSERT, UPDATE, 和DELETE,然而很多事件都可以与DDL触发器关联,稍后我们将了解。 在数据库中列出触发器 那么怎么获取触发器列表?...每个表或者视图对于触发器行为都有一个INSTEAD OF 触发器,可能是UPDATE, DELETE, 或者 INSERT 。但是一个表可以有多个AFTER触发器行为。

    1.6K20

    sqlserver事务锁死_sql触发器格式

    一、触发器 触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表 事件相关的特殊的存储过程,它的执行不是程序调用,也不是手工启动,而是事件来触发...,当对一个表 进行操作( insert,deleteupdate)时就会激活它执行。...SqlServer中的DML触发器有三种: insert触发器:向表中插入数据时被触发delete触发器:从表中删除数据时被触发update触发器:修改表中数据时被触发。...当遇到下列情形时,应考虑使用DML触发器: 通过数据库中的相关表实现级联更改 防止恶意或者错误的insert、updatedelete操作,并强制执行check约束定义的限制更为复杂的其他 限制。...DELETE, INSERT, UPDATE] AS GO T-SQL语句 – with encryption 表示加密触发器定义的sql文本 – delete,insert,update指定触发器的类型

    1K10

    触发思考

    读到周洲同学的博客,看到一篇关于触发器的文章,是在用户充值时,须要在t_reCharge表中插入一条记录,同一时候更新t_card表以保证数据一致性.我们当时没想特别多,没想到触发器,就是写了多条sql...因为使表中数据发生变化的操作有插入、更新和删除,所以触发器能够分为三类:INSERT触发器UPDATE触发器DELETE触发器。...触发器能够检查inserted表,确定是否运行触发器动作和怎样运行触发器动作。 2.DELETE触发器 当试图从表中删除信息时,DELETE触发器触发。...被删除的行在触发器表中将不再存在。因此,触发器表和deleted表之间没有共同的记录。 3.UPDATE触发器 UPDATE语句能够看成两步。删除一条旧记录。插入一条新记录。所以。...另外,依据触发器的工作原理,我们能够訪问inserted和deleted这两张暂时表,须要明确的是inserted存放进行insert和update操作后的数据;deleted存放进行deleteupdate

    68610

    SQL知识整理一:触发器、存储过程、表变量、临时表

    触发器   触发器的基础知识 create trigger tr_name on table/view { for | after | instead of } [update][,][insert...、delete:激活触发器的三种操作,可以同时执行,也可选其一   6 if update (col_name):表明所作的操作对指定列是否有影响,有影响,则激活触发器。...此外,因为delete 操作只对行有影响, 所以如果使用delete操作就不能用这条语句了(虽然使用也不出错,但是不能激活触发器,没意义)。   ...7 触发器执行时用到的两个特殊表:deleted ,inserted     deleted 和inserted 可以说是一种特殊的临时表,是在进行激活触发器系统自动生成的,其结构与触发器作用的表结构是一样的...Deleted 存放进行deleteupdate操作前的数据     注意:update 操作相当于先进行delete 再进行insert ,所以在进行update操作时,修改前的数据拷贝一条到deleted

    92820

    【说站】mysql触发器如何使用

    mysql触发器如何使用 说明 1、触发器也是存储过程程序的一种,而触发器内部的执行SQL语句是可以多行操作的。 2、在MySQL的存储过程程序中,要定义结束符。...语法 before/after:触发器是在增删改之前执行,还是之后执行 delete/insert/update触发器哪些行为触发(增、删、改) on 表名:触发器监视哪张表的(增、删、改)操作 触发...SQL代码块:执行触发器包含的SQL语句 实例 创建触发器,当用户购买商品时,同时更新对应商品库存记录,代码如下所示: -- 删除触发器,drop trigger 触发器名称 -- if exists判断存在才会删除...drop trigger if exists myty1; -- 创建触发器 create trigger mytg1-- myty1触发器的名称 after insert on orders-- orders...在哪张表上建立触发器; for each row begin update product set num = num-new.num where pid=new.pid; end; -- 往订单表插入记录

    82410

    MySQL触发器的详细教学与实战分析

    一、什么是触发器 触发器(trigger)是MySQL提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是程序调用,也不是手工启动,而是事件来触发,比如当对一个表进行操作...三、触发器创建的四要素 监视地点(table) 监视事件(insert、updatedelete触发时间(after、before) 触发事件(insert、updatedelete) 四、触发器的使用语法...before/after: 触发器是在增删改之前执行,还是之后执行 delete/insert/update触发器哪些行为触发(增、删、改) on 表名: 触发器监视哪张表的(增、删、改)操作...触发SQL代码块: 执行触发器包含的SQL语句 1CREATE TRIGGER 触发器名 2BEFORE|AFTER DELETE|INSERT|UPDATE 3ON 表名 FOR EACH ROW 4BEGIN...汇总一起解释这个触发器就是:创建一个触发器名称为t1的触发器触发器监视employee表执行update(更新)操作后,就开始执行触发器内部SQL语句update tb_class set num =

    1.3K10
    领券