编写的触发器

IF OBJECT_ID (‘skBuyProduct_Materiel_iMaterialType‘,‘TR‘) IS NOT NULL
DROP TRIGGER skBuyProduct_Materiel_iMaterialType;
GO

CREATE TRIGGER skBuyProduct_Materiel_iMaterialType ON skBuyProduct_Materiel
AFTER INSERT ,UPDATE
AS
DECLARE @ID INTEGER --物料加工管理_产品_物料 ID 此ID与skBuyProduct_PM中的ID_ProduceMateriel 相同
DECLARE @cBillCode_BuyProductRequisition VARCHAR(200)
DECLARE @cCode_Product VARCHAR(200)

SELECT @ID = ID FROM inserted

IF NOT EXISTS(
SELECT 1 FROM skBuyProductRequisition_Materiel mm INNER JOIN
(
SELECT t.iMaterialType,t.ID_Material, d.ID_Main, d.ID_Produce, d.ID_ProduceMateriel, n.ID_RequisitionDetail, n.cBillCode_BuyProductRequisition,
CASE WHEN t.iMaterialType = 0 THEN 6 WHEN t.iMaterialType = 1 THEN 4 WHEN t.iMaterialType = 2 THEN 1 END iMaterialType_sq
FROM skBuyProduct_Materiel t INNER JOIN skBuyProduct_PM d ON t.id = d.ID_ProduceMateriel
INNER JOIN skRequisition_BuyRelation n ON d.ID_Main = n.ID_BuyProduct AND d.ID_Produce = n.ID_BuyDetail
WHERE t.id = @ID
)aa ON mm.ID_Main = aa.ID_RequisitionDetail AND mm.ID_Material = aa.ID_Material AND mm.iType = aa.iMaterialType_sq
)
BEGIN
SELECT @cBillCode_BuyProductRequisition = n.cBillCode_BuyProductRequisition ,@cCode_Product= p.cBillCode
FROM skBuyProduct_Materiel t INNER JOIN skBuyProduct_PM d ON t.id = d.ID_ProduceMateriel
INNER JOIN skBuyProduct p ON d.ID_Main = p.id
INNER JOIN skRequisition_BuyRelation n ON d.ID_Main = n.ID_BuyProduct AND d.ID_Produce = n.ID_BuyDetail
WHERE t.id = 159794
RAISERROR ( ‘触发器:插入物料加工管理_产品_物料表(skBuyProduct_Materiel)时,物料类型和申请单的类型匹配不上,请找系统管理员报告这个错误!加工单号:("%s");申请单号:("%s")‘, 16, 1,@cCode_Product,@cBillCode_BuyProductRequisition);
ROLLBACK TRANSACTION;
RETURN
END

时间: 2024-12-06 13:14:21

编写的触发器的相关文章

数据库中触发器的创建与注意事项

[IT专家网独家] 触发器是特殊的存储过程,但它的执行不是由手工调用,也不是由程序执行,触发器必须由事件才能触发.触发器的触发事件分可为3类,分别是DML事件.DDL事件和数据库事件. DML触发器的要点 DML触发器是定义在表上的触发器,由DML事件引发.编写DML触发器的要素是: 确定触发的表,即在其上定义触发器的表. 确定触发的事件,DML触发器的触发事件有INSERT.UPDATE和DELETE三种 确定触发时间.触发的时间有BEFORE和AFTER两种,分别表示触发动作发生在DML语句

Oracle触发器如何调用Java实现Openfire消息发送

写在前面,要想实现整个过程的成功执行请先准备以下文件: 1. 登陆Openfire服务端以及Spark客户端相关程序(openfire_4_0_1.exe.spark_2_7_6.exe) 2. 连接Openfire和Oracle相关的jar包(presence.jar.smack.jar.smackx-debug.jar.smackx.jar.ojdbc.jar)  Step1:安装Openfire服务端并配置数据库连接,配置参考<Openfire服务器安装与配置教程> Step2:在Ecl

黑马视频-触发器

触发器inserted表与deleted表 执行insert语句,使用inserted表 执行delete语句,使用deleted表 执行update语句,旧数据放到deleted表,新数据放到inserted表 触发器:自动化,减少手动到来误操作 触发器没有执行完毕,就会一直占用表,其他链接不能使用该表 output.inserted.列名 1.DML触发器:insert delete update(不支持select) after触发器(for) instead of 触发器(不支持befo

mysql 触发器 Varnish:高速http缓存 varnish cdn 推送平台

sendfile(数据直接从 kernal的buffer出去)适合小文件Aio(nginx)全异步(与事件驱动io的区别是:数据会到达mem才会通知,其实也不需要通知 可以直接返回给客户端) 支持:mmap event drive(处理大文件) 上一回说到,在数据库修改后,redis里面的数据不能做到自动更新,必须手动删除更改过的数据 根据以上问题我们做出如下改进:所以接下来就要通过 mysql 触发器将改变的数据同步到 redis 中配置 gearman 实现数据同步Gearman 是一个支持

实现mysql和redis之间的触发数据同步——mysql 触发器+gearman+php.worker

上回一次我们已经实现了 redis 作为 mysql 的缓存服务器,但是如果更新了 mysql,redis 中仍然会有对应的 KEY,数据就不会更新,此时就会出现 mysql 和 redis 数据不一致的情 况. 详情请见        基于redis缓存数据库实现lnmp架构高速访问 所以接下来就要通过 mysql 触发器将改变的数据同步到 redis 中. 因为mysql和redis数据格式不同,不能实现直接同步,所以 将MySQL数据首先放入Gearman中,然后通过一个自己编写的PHP

PL/SQL触发器

触发器 触发器是许多关系数据库系统都提供的一项技术.在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块. 1.1触发器类型 触发器在数据库里以独立的对象存储,它与存储过程不同的是,存储过程通过其它程序来启动运行或直接启动运行,而触发器是由一个事件来启动运行.即触发器是当某个事件发生时自动地隐式运行.并且,触发器不能接收参数.所以运行触发器就叫触发或点火(firing).ORACLE事件指的是对数据库的表进行的INSERT.UPDATE及DELETE操作或对视

.Net开源数据库设计工具Mr.E For Linq (EF 6.1) 教程(二)级联删除和触发器

1.建立级联删除 Mr.E的级联删除并非数据库自带那个级联删除,而是Mr.E自带的,所以它能触发你C#里面编写的触发器. 首先,建立级联删除关系,如下图有两个表,UserInfo和UserDocument, UserDocument表依靠UserID字段,和UserInfo联系起来.现在我要实现,当UserInfo里面的数据删除时,自动删除UserDocument表里面UserID=UserInfo.id的那些数据,应该怎么做呢? 首先,双击UserInfo打开它的属性编辑器,点击[级联删除]设

SQL Server DDL 触发器(Trigger)-- 介绍

SQL Server DDL 触发器(Trigger)-- 介绍 触发器(Trigger)以往仅用在特定的对象上,如数据表.当数据维护语言(DML)的Insert.Delete.Update语法针对这些对象工作时,由系统自动调用对应的触发器,而在SQL Server 2000中增加了Instead of Trigger,通过触发器来取代原本要执行的添加.修改.删除语法,且可以设置在视图上.由于Instead of Trigger是在DML语法真的改变数据写入事务日志之前触发,因此,也称为Befo

Oracle使用触发器和mysql中使用触发器的比较——学习笔记

一.触发器 1.触发器在数据库里以独立的对象存储, 2.触发器不需要调用,它由一个事件来触发运行 3.触发器不能接收参数 --触发器的应用 举个例子:校内网.开心网.facebook,当你发一个日志,自动通知好友,其实就是在增加日志的时候做一个出发,再向表中写入条目. --触发器的效率很高 举例:论坛的发帖,每插入一个帖子都希望将版面表中的最后发帖时间,帖子总数字段进行同步更新,这时使用触发器效率会很高. 二.Oracle 使用 PL/SQL 编写触发器 1.--PL/SQL创建触发器的一般语法