SQLServer 触发器

article/2025/10/13 10:48:56

今天修复K3系统生产出库单,审核、返审核 领料数量一直不变,没有相应改变,K3是16年买的,没有源码开发文档和表结构,只能在sqlserver中添加sql语句监视,看审核后改变那个表的状态和数据源sql语句,用触发器改变数量。

提示:触发器,可以理解是自动执行的存储过程不用调用;当指定表有增删改的动作就会触发
触发器触发会有两张表,存放改动前后的数据
在这里插入图片描述
参考

CREATE TRIGGER [dbo].[Quantity_Update]   /*Update 触发器*/
ON [dbo].ICStockBill                    /*目标表*/
AFTER UPDATE
AS
BEGINSET NOCOUNT ON;DECLARE @FInterID INT;DECLARE @FStatus INT;/*FStatus 0--未审核、1--已审核、2--部分行关闭、3--已关闭*/IF(UPDATE(FStatus))BEGINSELECT @FInterID = Inserted.FInterID,@FStatus = Inserted.FStatusFROM Inserted;/*SELECT *FROM Inserted  ----更改后 新SELECT *FROM Deleted   ----更改前 旧*/UPDATE PeSET Pe.FStockQty = CASEWHEN @FStatus = 1 THEN (Pe.FStockQty + Ics.FQty)WHEN @FStatus = 0 THEN (Pe.FStockQty - Ics.FQty)END,Pe.FAuxStockQty = CASEWHEN @FStatus = 1 THEN (Pe.FAuxStockQty + Ics.FQty)WHEN @FStatus = 0 THEN (Pe.FAuxStockQty - Ics.FQty)ENDFROM PPBOMEntry PeINNER JOIN ICStockBillEntry IcsON Ics.FSourceInterId = Pe.FICMOInterIDAND Ics.FItemID = Pe.FItemIDAND Ics.FInterID = @FInterID /*审核id*/WHERE Pe.FAuxQtyMust <> 0;/*审核记录*/INSERT [dbo].[Statust]SELECT @FStatus,GETDATE();ENDEND;

把K3系统数据库,sql server profiler 加入监视,发现很多有两条一起执行的,如图
在这里插入图片描述
修改表相当于执行了两次(肯定是有一条是重复执行的,返回影响行肯定是0),那触发器也就执行了两次,更改的随之数量就会出现问题;所以需要指定改动是那个字段,前面说到是审核, FStatus 就是审核状态,加个判断条件 IF(UPDATE(FStatus)),获取有效的动作改动

IF(UPDATE(FStatus))
BEGIN
—业务逻辑
END

加入一个简单的记录,用于记录什么时候更新的

CREATE TABLE [dbo].[Statust]
(FStatus INT NULL,dataend DATETIME DEFAULT GETDATE() null
);/*审核记录*/
INSERT [dbo].[Statust]
SELECT @FStatus,GETDATE();

另外触发器,有两个备份表Inserted 、Deleted
SELECT *FROM Inserted ----更改后 新
SELECT FROM Deleted ----更改前 旧/
可以做改动的数据备份

核心逻辑部分就是,获取到有效的状态改动,就需要变更相应的数量

UPDATE Pe
SET Pe.FStockQty = CASEWHEN @FStatus = 1 THEN (Pe.FStockQty + Ics.FQty)WHEN @FStatus = 0 THEN (Pe.FStockQty - Ics.FQty)END,Pe.FAuxStockQty = CASEWHEN @FStatus = 1 THEN (Pe.FAuxStockQty + Ics.FQty)WHEN @FStatus = 0 THEN (Pe.FAuxStockQty - Ics.FQty)END
FROM PPBOMEntry PeINNER JOIN ICStockBillEntry IcsON Ics.FSourceInterId = Pe.FICMOInterIDAND Ics.FItemID = Pe.FItemIDAND Ics.FInterID = @FInterID /*审核id*/
WHERE Pe.FAuxQtyMust <> 0;

查看触发器

SELECT   object_name(a.parent_obj) as [表名]  ,a.name as [触发器名称]  ,(case when b.is_disabled=0 then '启用' else '禁用' end) as [状态]  ,b.create_date as [创建日期]  ,b.modify_date as [修改日期]  ,c.text as [触发器语句]  
FROM sysobjects a  INNER JOIN sys.triggers b  ON b.object_id=a.id  INNER JOIN syscomments c  ON c.id=a.id  
WHERE a.xtype='tr'  AND a.name='Quantity_Update'  --触发器的名称

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

相关文章

Mac 解压rar 文件

Mac 解压rar 文件 第一种方法&#xff1a; 下载下面链接中的软件&#xff0c;安装好就可以直接用了。 http://baijiahao.baidu.com/s?id1604390455412644388&wfrspider&forpc 安装过程中&#xff0c;一直点击下一步即可 第二种方法&#xff1a; https://blog.csd…

Mac电脑上视频压缩处理

第一步&#xff1a;用QuickTime Player打开你准备压缩的视频 第二步&#xff1a;选择文件——导出——1080P 720P 480P&#xff08;建议用720和480&#xff09; 第三步&#xff1a;选择你想要导出的大小&#xff0c;点击保存 最后一步&#xff0c;等存储完成就了 上面的图片视…

苹果电脑的压缩工具——FastZip

1.FastZip,一键快捷&#xff01; FastZip可以进行分卷压缩解压&#xff0c;支持7Z&#xff0c;ZIP&#xff0c;RAR&#xff0c;TAR&#xff0c;GZIP&#xff0c;BZIP2&#xff0c;XZ&#xff0c;LZIP&#xff0c;ACE&#xff0c;ISO&#xff0c;CAB&#xff0c;PAX&#xff0c…

Linux/macOS的打包、压缩、解压缩

打包 tar&#xff0c;打包后的扩展名为 .tar xxx.tar为打包后的文件名&#xff0c;xxx为被打包的文件 tar -cf xxx.tar xxx压缩 压缩命令为&#xff1a;gzip、bzip2&#xff0c;但是tar命令中已经集成压缩命令&#xff0c;可以通过制定参数进行文件压缩 tar -zcf xxx.tar.…

【Mac-rar文件解压】Mac系统如何打开rar压缩包文件_无需下载应用程序的快捷4步操作法

一位不喜欢下很多应用程序在&#x1f4bb;的目录 0.查阅说明1. 打开终端2.输入命令3. 输入命令4. 开始解压&#xff01; 0.查阅说明 大家好&#x1f44b;&#xff0c;因为本人属实很不喜欢下载很多应用程序在电脑上&#xff0c;因此在网络上找到了另外一种解决解压rar压缩包的…

mac压缩文件多了__MACOSX目录问题

文章目录 背景原因解决方案&#xff1a;更换压缩方式分析问题拓展&#xff08;.DS_Store&#xff09; 背景 项目中有一个场景&#xff0c;需要把目录压缩为app离线包的zip 但是压缩之后一致打不开&#xff0c;别人上传的zip是好的 原因 如图&#xff0c;我上传的在安卓设备…

Mac 终端解压缩命令大全

Mac 终端解压缩命令大全 .zip 解压缩&#xff1a; unzip FileName.zip 压缩&#xff1a; zip FileName.zip DirName zip 使用细节 zip -q -r -e -m -o FileName.zip DirName -q 表示不显示压缩进度状态-r 表示子目录子文件全部压缩为zip //这部比较重要&#xff0c;不然的…

Mac使用命令行工具解压和压缩rar文件

目前在Mac电脑里支持解压缩的格式主要有&#xff1a;zip、gz等&#xff0c;但是还不支持rar格式的文件&#xff0c;接下来带着大家学习一下如何解压缩rar格式文件。 1.下载rar工具 打开&#xff1a;https://www.rarlab.com/download.htm 根据自己电脑的芯片要求选择自己的安装…

如何在Mac上快速压缩和解压文件?Mac上解压和压缩文件的方法

苹果mac电脑怎么压缩和解压文件?Mac电脑仅默认支持把文件压缩成zip格式,解压成zip、tar.gz,bz2等格式,有些操作需要安装第三方软件来完成,这篇文章为大家带来几种关于在Mac上解压和压缩文件的方法,有兴趣的朋友可以来了解一下载哦! 一、解压工具 1.MacOS自带的解压 只能…

Mac有哪些解压缩软件,他们的优缺点是什么,哪款比较好用?

Mac有哪些解压缩软件&#xff0c;他们的优缺点是什么&#xff0c;哪款比较好用&#xff1f; 相信有很多小伙伴和我有一样的疑问&#xff0c;Mac 有哪些解压缩软件&#xff0c;那款更好用哪&#xff1f;下面我们就带着疑问来详细了解一下 Mac 上的常见解压缩软件 一、macZip ⇲…

使用数字芯片将5V转3.3V方案电路图

5V转3.3V常用方案 ## &#xff11;&#xff0e;AMS117 优点&#xff1a;便宜&#xff0c;1毛一片 缺点&#xff1a;体积大 电路图&#xff08;来自正点原子&#xff09;&#xff1a; 2. HT7833 优点&#xff1a;体积比AMS1117小一号 缺点:比1117贵一点&#xff0c;8~9毛…

数字芯片后端设计——SRAM宏模块布局布线

在40nm SMIC工艺下&#xff0c;根据手册总结单端SRAM的布局布线问题。 ArtiGrid power structure options&#xff1a;以下图为例&#xff0c;memory的电源布线&#xff0c;无论是core核还是外围periphery&#xff0c;都是在M4层展开&#xff0c;在整个SRAM宏模块中&#xff0…

华为2019数字芯片岗笔试解析二(单选第三部分)

首发来自公众号&#xff1a;数字芯片设计 21.数字电路设计中&#xff0c;下列哪种手段无法消除竞争冒险现象&#xff08;&#xff09;【A】加滤波电容&#xff0c;消除毛刺【B】增加冗余项消除逻辑冒险【C】增加选通信号&#xff0c;避开毛刺【D】降低时钟频率 解析&#xff1a…

【开卷】第一期(下) ​海思提前批数字芯片笔试(带解析)

2022届的IC招聘&#xff0c;也来的太早了一些。应届生们刚刚办理完入职&#xff0c;各个企业的提前批招聘就突然启动。颇有秋招变夏招的架势。伴随着更多的非科班同学的转行&#xff0c;卷起来已成必然。而各个企业涉猎广泛的笔试题更是打了刚刚开始进行秋招准备的同学们一个措…

华为2019数字芯片岗笔试解析(多选部分)

首发来自微信公众号&#xff1a;数字芯片设计 不定项选择 1.关于状态机编码&#xff0c;如下描述中正确的是&#xff08;&#xff09;【A】状态编码用parameter定义【B】状态机必须有default态【C】用组合逻辑和时序逻辑分离的风格描述FSM【D】用case语句描述状态的转移 解析&a…

华为海思 2021数字芯片/IC 笔试题+解析

题目来源于众多网友对笔试的记录、回忆。 理解不到位&#xff0c;难免出错&#xff0c;解析仅为个人看法&#xff0c;有不同意见请留言指教&#xff0c;谢谢&#xff01; 题型&#xff1a; 30个单选10个多选 单选 1.影响芯片成本的主要因素是die size和封装&#xff0c;但电…

紫光展锐2021数字芯片笔试

紫光展锐2021数字芯片笔试题 一、单选题 A,计算过程参考CRC计算原理介绍B,删除命令的常用用法:rm -rf ./file.txt,mkdir是新建文件夹(目录),mv是移动文件(重命名) 不知道,感觉选A;A,PMOS是形成空穴沟道,衬底需要接VDD B,for…join_none内部各子语句是并行执行;…

告诉你什么是数字芯片和模拟芯片

我们常说隔行如隔山&#xff0c;哪怕你从各种渠道了解到了芯片&#xff0c;可对于芯片你真的了解吗&#xff1f;下面告诉你什么是数字芯片和模拟芯片&#xff1f; 根据芯片的功能不同&#xff0c;划分为两大类数字芯片和模拟芯片。像海思的麒麟系列芯片就是数字芯片里的一种&am…

华为2019数字芯片岗笔试解析二(多选部分)

首发来自微信公众号&#xff1a;数字芯片设计 1、异步设计的特点是&#xff08;&#xff09;【A】没有时钟skew问题【B】可移植性高【C】低电源消耗【D】设计可靠性高 解析&#xff1a;同步电路设计利用时钟脉冲使其子系统同步运作&#xff0c;而异步电路设计不使用时钟脉冲做同…