判断触发器正在处理的是插入,删除还是更新触发_MsSql

但是有时候,可以视看处进逻辑程度,可以把三者写成一个触发器,只是在其中稍作判断而已。

你可以根据从下面方法判断触发器是是处理了插入,删除还是更新触发的:

复制代码 代码如下:

--宣告两个变量
DECLARE @D BIT = 0
DECLARE @I BIT = 0

--如果在DELETED内部临时触发表找到记录,说明旧数据被删除
IF EXISTS(SELECT TOP 1 1 FROM DELETED)
SET @D = 1

--如果在INSERTED内部临时触发表找到记录,说明有新数据插入
IF EXISTS(SELECT TOP 1 1 FROM INSERTED)
SET @I = 1

--如果两个表都有记录,说明触发器是执行更新触发
IF @I = 1 AND @D = 1
PRINT(N'更新。')

--如果变量@I值被变更为1,而变量@D没有变更,说明触发器是执行插入触发
IF @I = 1 AND @D = 0
PRINT(N'插入')

--下面判断成立,说明说明触发器是执行删除触发
IF @I = 0 AND @D = 1
PRINT(N'删除')

另外有关两个内部临时触发表,触发器的Inserted表和Deleted表

触发器有两个虚拟表,Inserted表和Deleted表,这两个表在不同操作情况之下,表中的数据状态可不一样。
一、插入操作(INSERT)时:Inserted表有数据,Deleted表无数据。
二、更新操作(UPDATE)时:Inserted表有数据(新数据),Deleted表有数据(旧数据)。
三、删除操作(DELETE)时:Inserted表无数据,Deleted表有数据。

时间: 2024-09-12 10:17:02

判断触发器正在处理的是插入,删除还是更新触发_MsSql的相关文章

判断触发器正在处理的是插入,删除还是更新触发

但是有时候,可以视看处进逻辑程度,可以把三者写成一个触发器,只是在其中稍作判断而已. 你可以根据从下面方法判断触发器是是处理了插入,删除还是更新触发的: 复制代码 代码如下: --宣告两个变量 DECLARE @D BIT = 0 DECLARE @I BIT = 0 --如果在DELETED内部临时触发表找到记录,说明旧数据被删除 IF EXISTS(SELECT TOP 1 1 FROM DELETED) SET @D = 1 --如果在INSERTED内部临时触发表找到记录,说明有新数据插

mssql server 判断触发器正在处理的是插入,删除还是更新触发

 代码如下 复制代码 --宣告两个变量 DECLARE @D BIT = 0 DECLARE @I BIT = 0 --如果在DELETED内部临时触发表找到记录,说明旧数据被删除  IF EXISTS(SELECT TOP 1 1 FROM DELETED) SET @D = 1 --如果在INSERTED内部临时触发表找到记录,说明有新数据插入  IF EXISTS(SELECT TOP 1 1 FROM INSERTED) SET @I = 1  --如果两个表都有记录,说明触发器是执行更

Java实现数据同步,并且判断操作是新增、修改还是删除

问题描述 筒子们,你们有谁做过这个吗?连接客户的Oracle数据库,同步他们的数据,同步更新到自己公司的数据库,并且判断操作的数据是新增.修改还是删除 解决方案 解决方案二:亲们求解呀~解决方案三:1.数据量有多大?2.要求的实时性?解决方案四:数据库新建一个DBNotify表字段:tableName.propertyName.value.operator分别是表名.属性名.操作的值.操作类型(增删改自己定义)公司这边根据这个表去同步客户的数据库公司和客户之间的交互以及同步更新后的业务逻辑需要商

Sql Server 触发器实现多表之间同步增加、删除与更新

Sql Server 触发器实现多表之间同步增加.删除与更新 定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程.      常见的触发器有三种:分别应用于Insert , Update , Delete 事件.(SQL Server 2000定义了新的触发器,这里不提)      我为什么要使用触发器?比如,这么两个表:      Create Table Student(             --学生表

将数组元素按顺序放入链表中并进行插入删除等操作的编程问题

问题描述 将数组元素按顺序放入链表中并进行插入删除等操作的编程问题 编译无错误,但是无法运行,感觉是将数组当做参数那个地方出了问题,但是不知道具体原因,求助CSDN的朋友帮忙解答,万分感谢 解决方案 大体看了一下首先在list的构造函数中 没有对head进行初始化, 应该是 head = new Node; head->next = null;其次在你的create方法中你并没有将数据放入到以head为头的链表中,我猜你应该是忘记对q初始化,q = head; 给你的建议是加断点一步步调试, 这

关于c语言实现动态顺序表的插入删除

问题描述 关于c语言实现动态顺序表的插入删除 3C #include ""stdafx.h""#includeconst int MAXSIZE = 10;typedef struct{ int *elem; int length; int maxsize;}sqlist;void initList(sqlist *L){ L->elem = (int *)malloc(L->maxsize*sizeof(int)); if (!L->elem)

sql使用触发器当一张表插入数据就往另一张表插入数据

问题描述 sql使用触发器当一张表插入数据就往另一张表插入数据 日期格式是这样的但是使用触发器当上图插入了一条数据就往下图插入相同的数据,如下图为什么日期格式不一样呢? 解决方案 SQL(二) 将一张表数据插入另外一张表从表中插入数据到另外一张表oracle 将一张表的数据插入到另一张表 解决方案二: 日期格式的问题,先确保两张表对应列的数字类型一致,插入使用convert格式化一下:CONVERT(varchar(10), GETDATE(), 111).

java-链表插入删除顺序问题

问题描述 链表插入删除顺序问题 Java新手,现在在学习链表,发现链表的插入和删除操作不能很好的掌握,不参考代码不知道先修改哪一个reference,再比如在单链表头插入连接点,代码如下 newLink.next = first; first = newLink: 书上写第一行的first是旧的first,第二行的是新的,都是first怎么还分新旧? 所以请教大家添加和删除连接点有什么通用的原则吗?怎样才能灵活的掌握各个连接点引用的修改? 解决方案 就是一个赋值. a的下一个节点=b; b=a;

结构体-求大神,根据指定位置插入删除电话号码本联系人,但是插入后的联系人个数不能返回

问题描述 求大神,根据指定位置插入删除电话号码本联系人,但是插入后的联系人个数不能返回 #include #include #include #include typedef struct LNode { char name[10]; char phone_number[15]; struct LNode next; }LNode,*LinkList; void InitList_L(LinkList &L,int n); void Add_L(LinkList &L,int i,char