sqlserver触发器的使用以及inserted和deleted详解

article/2025/9/12 8:39:08

背景:最近在项目中有需求是当人员表中有变动时(比如:增加人员、修改人员信息、删除人员信息)需要把这张表中的变动的信息同步到它对应的日志表中。那么如果用代码写逻辑的话在执行效率上会比较慢,正好sqlserver提供了触发器,我们可以利用触发器进行解决这个问题。

什么时sqlserver触发器

触发器是在对表进行插入、更新或删除操作时自动执行的特殊存储过程。触发器通常用于强制业务规则,触发器是一种高级约束,可以定义比CHECK约束更为复杂的约束:可以执行复杂的SQL语句(if/while/case),可以引用其他表中的列。触发器定义在特定的表上,与表相关,自动触发执行,不能直接调用,是一个事务(可回滚)。

触发器的种类

触发器是在对表进行增、删、改操作才能够触发触发器。这里分为after(之后)和instead of(之前)触发。after触发器要求只有执行某一操作(insert、update、delete)之后触发器才能被触发,且只能定义在表上。而instead of触发器表示并不执行其定义的操作(insert、update、delete)而仅是执行触发器本身,其优先级高于触发语句的执行。

触发器的使用

以下内容介绍after之后的触发器。以navicat工具为例。

首先我们需要监测哪个数据库就在哪个数据库创建触发器。比如:需要监听人员表中的数据变化,那么就需要在人员表中添加触发器。点击表的设计,找到触发器

在上方点击添加触发器,并设置触发器的名称以及触发的时间和在什么情况下触发。

设置完这些之后可以去写逻辑

 

 首先介绍一下sql触发器中两个表,inserted和deleted。可以理解为这两张表是临时表,它的表字段和在哪个表中创建触发器的字段是一致的,比如:我在人员管理表中添加了触发器,那么inserted表和deleted表中的字段是一致的。这两张表是系统在内存中创建的两张表,不会存储到数据库中,且这两张表是只读的,不能修改数据。当触发器完成工作之后,这两张表也会被删除

表操作inserted表deleted表
insert存放新增的记录
update存放新增的记录存放更新前的数据
delete存放新增的数据

举例:

BEGIN-- 			if EXISTS (select * from deleted)    //判断deleted表中是否有数据declare @is_delete char(20)       //定义变量if EXISTS(select is_delete from inserted  )declare @userId varchar(20)declare @userName VARCHAR(20)declare @machineId VARCHAR(40)declare @operator_Id VARCHAR(20)declare @operator varchar(20)select @is_delete=is_delete,@userId=user_id,@userName=user_name,@machineId=machine_id,@operator_Id=update_user_id,@operator=update_user_name FROM inserted   //给变量赋值IF @is_delete=1  判断条件BEGINinsert into User_Management_Logs(user_id,user_name,act,machine_id,operator,operator_id) VALUES(@userId,@userName,'删除用户',@machineId,@operator,@operator_Id)  //在哪张表中插入数据END
END


http://chatgpt.dhexx.cn/article/fDuF5KCf.shtml

相关文章

insert和insertSelective区别

使用逆向工程生成的代码做一个添加时通常都会给出两个答案&#xff0c;如题目想要增加一条数据会让你选择insert或者insertSelective 两者的区别在于如果选择insert 那么所有的字段都会添加一遍即使没有值 <insert id"insert" parameterType"com.ego.pojo.Tb…

Inserted和Deleted在insert、update、delete的简单使用

Inserted和Deleted在insert、update、delete的简单使用 Inserted表和Deleted表,仅仅在触发器运行时存在。当insert、update、delete操作时&#xff0c;可使用借助两个表来输出&#xff08;使用OUTPUT关键字&#xff09;操作前后的数据的变化。 Insert Update Delete Insert…

定义自定义指令;inserted()、update()

自定义指令的意义&#xff1a;对普通DOM元素进行底层操作&#xff1b; 作用 &#xff1a;可以获取到底层的dom&#xff0c;拿到想要的节点&#xff0c;从而进行操作&#xff1b; 实际应用&#xff1a;可以通过指令知道什么时候dom创建完成&#xff0c;从而进行依赖dom的库的初…

29.VUE自定义指令directive和inserted

VUE自定义指令directive和inserted 1.什么事自定义指令1.2使用自定义指令的方式 2.设置自定义组件2.1 设置全局指令2.2 设置私有指令2.3 钩子函数3. 案例 1.什么事自定义指令 指令 (Directives) 是带有 v- 前缀的特殊特性。指令特性的值预期是单个 JavaScript 表达式 (v-for 例…

echarts中x轴 y轴配置(字体颜色,线的颜色,分割线,y周单位颜色)。vue中直接使用echarts以及vue中使用vue-echarts如何配置横向渐变与纵向渐变(后者适用于前者)

vue中直接使用echarts //var myChart this.$echarts.init(document.getElementById("echart-twoline")); //vue var myChart echarts.init(document.getElementById("echart-twoline"));//jquery var option {backgroundColor: "#323a5e",…

Echarts折线图X轴Y轴图例位置调整

当X轴数据过多时Echarts会默认显示一半 如下图只显示奇数月份 Echarts加入axisLabel然后将interval设置为0就会将横轴全部显示 看一下效果 但是信息太多,看起来黏在了一起,我们可以让它-30度角倾斜显示 同样在axisLabel将rotate设置为-30,再看一下效果 这下都显示出来的,但…

修改echarts的x轴y轴的刻度和刻度线文本颜色和xy轴的轴线颜色和标题title的字体颜色

1&#xff0c;x轴y轴都是一样的&#xff1a; 1.1修改刻度文本颜色&#xff1a; 找到xAxis和yAxis&#xff1a; 添加如下代码&#xff1a;&#xff08;和data和type同级并列&#xff09; axisLabel: {show: true,textStyle: {color: #fff} } 如图&#xff1a; 1.2修改xy轴的轴…

转:echarts图表x,y轴的设置

转自&#xff1a; https://www.cnblogs.com/cjh-strive/p/11065005.html 每到用echarts这门技术去画图的时候&#xff0c;我们大多人都是直接从echarts的官网的案例找相应的案例直接把代码复制到开发软件上基本随便一改就能使用&#xff0c;但是这种情况基本都是在练习的时候和…

r语言plot函数x轴y轴名字_R语言中绘图的注释函数小结

我们知道一个漂亮而清晰的图像的形成指定缺不了图像中细节的注释。那么今天我们就来总结下在R语言中那些注释函数。 首先,我们看下文本注释函数:text(),mtext(), legend()。这些函数都是R语言内置的基础函数,我们看下具体的实例: 1. text() 注释绘图中的任意点。 其中主要…

echarts的x轴y轴的颜色改变

在操作echarts时&#xff0c;需求要求echarts的xy轴的颜色要与图形的颜色一致。 图1&#xff1a; 图2&#xff1a; 解决方案&#xff1a; 代码展示&#xff1a; var myChart1; $(function() { document.getElementById("begin1").flatpickr(); document.getEl…

r语言plot函数x轴y轴名字_Matplotlib入门-1-plt.plot( )绘制折线图

在Python学堂1-8中,我们通过一个实例(温湿度变化曲线对比分析图)对Matplotlib模块中的常用折线图进行了初步的认知学习。本章及后续几章内容是对前面内容的总结以及细化。系统性的带领大家共同学习Matplotlib中的众多知识点。 废话不多说,直接开始 Matplotlib模块的导入 im…

echarts如何优雅的去掉x轴y轴

option_column: {color: [#9D509F],grid: {left: 0,right: 0,bottom: 0,top: 0,// grid 区域是否包含坐标轴的刻度标签containLabel: false},xAxis: [{type: category,boundaryGap: false,data: [Mon, Tue, Wed, Thu, Fri, Sat, Sun],show: true}],yAxis: [{show: false,axisLi…

echarts柱形图X轴Y轴相关配置

可配置XY轴刻度线&#xff0c;字体大小&#xff0c;柱形图大小颜色等 const options {tooltip: {trigger: axis,axisPointer: {// 坐标轴指示器&#xff0c;坐标轴触发有效type: shadow // 默认为直线&#xff0c;可选为&#xff1a;line | shadow},textStyle: {// 鼠标hover…

echarts中的x轴y轴颜色,文字颜色改变

echarts中的x轴y轴颜色&#xff0c;文字颜色改变 原先的图改变颜色之后的图重点代码全代码 在更换背景之后&#xff0c;原图中的xy轴的颜色不明显或是想改变XY轴的颜色以及轴上的文字颜色。 原先的图 改变颜色之后的图 重点代码 axisLine:{lineStyle:{//改变xy轴线条的颜色col…

echarts markline X轴 Y轴 添加标识线

一、X轴添加标识线 效果&#xff1a; 代码&#xff1a; markLine: {symbol: [none, none],itemStyle: {normal: {lineStyle: {type: dashed,color: red,},label: {show: true,position: end,distance: 20,textStyle: {color : red,fontSize: 14,},formatter: function() {ret…

matplotlib中x轴y轴字号或字体修改

#修改matplotlib中x轴y轴字体大小 import matplotlib.pyplot as plt import numpy as np plt.rcParams[font.sans-serif][SimHei] # 用来正常显示中文标签 plt.rcParams[axes.unicode_minus]False #显示英文 plt.rcParams[font.size] 23 #设置字体大小&#xff0c;全局…

matplotlib 笔记:设置x轴 y轴文字

原本的图&#xff1a; import numpy as np import matplotlib.pyplot as plt lstrange(10000) anp.random.choice(lst,150) plt.figure(figsize(15,5)) plt.plot(a) 设置x轴y轴文字&#xff1a; plt.figure(figsize(15,5)) plt.xticks(range(0,100,10)) plt.yticks(range(0,5…

Echarts直角坐标系x轴y轴属性设置大全

1、Echarts版本 "echarts": "^5.3.3", 2、最简单的直角坐标系&#xff0c;以柱状图为例。 常见的直角坐标系&#xff0c;x轴设置type: category&#xff0c;为类目轴&#xff0c;适用于离散的类目数据&#xff1b;y轴设置type: value&#xff0c;为数值轴…

x轴z轴代表的方向图片_x轴y轴z轴代表的方向_x轴y轴z轴代表的方向图

最近很多童鞋们在寻求关于x轴y轴z轴代表的方向的解答,今天充编为大家汇集5条解答来给大家真解! 有79%小白玩家认为x轴y轴z轴代表的方向_x轴y轴z轴代表的方向图值得一读! x轴y轴z轴代表的方向 1.xyz轴指哪些方向 展开全部 X轴指向上下 上为正 Y轴指向左右 右为正 Z轴指向前后…