使用触发器控制用户删除业务往来中使用的基础资料


  使用触发器控制用户删除业务往来中使用的基础资料使用触发器控制用户删除业务往来中使用的基础资料


比如说货品资料,如果这个货品有了业务上的往来,比如采购和销售单使用该货品,在基础资料就不能删除该货品,这样的约束如何实现?


有下面两种常见处理方式:

1. 在DAL层的Delete方法中控制,删除前查询业务往来表,如果有使用该基础资料就抛出异常终止删除。

2. 使用DELETE触发器实现。

3. 使用主外键约束



下面是使用触发器实现的代码:




ALTER TRIGGER trg_DropProduct 

ON dbo.tb_Product AFTER DELETE

AS

BEGIN

/*********************************************************************************

货品资料删除触发器,by www.csframework.com

--------------------------------------------------

SELECT * FROM tb_Product

SELECT * FROM dbo.tb_IAs

INSERT INTO tb_Product(ProductCode) VALUES ('BBX')

DELETE tb_Product WHERE ProductCode='BBX'

DELETE tb_Product WHERE ProductCode='XX'

DELETE tb_Product WHERE ProductCode='cpu'

**********************************************************************************/

DECLARE @ProductCode VARCHAR(20),@MSG NVARCHAR(200)


SELECT
 @ProductCode=ProductCode FROM DELETED

SELECT @ProductCode=ISNULL(@ProductCode,'')

SELECT @MSG='该货品在业务往来表中使用,不可以删除!'


    
IF EXISTS(SELECT * FROM dbo.tb_IAs WHERE ProductCode=@ProductCode) GOTO ERR --检查库存调整

    IF EXISTS(SELECT * FROM dbo.tb_ICs WHERE ProductCode=@ProductCode) GOTO ERR --检查库存盘点

    IF EXISTS(SELECT * FROM dbo.tb_INs WHERE ProductCode=@ProductCode) GOTO ERR --检查入库

    IF EXISTS(SELECT * FROM dbo.tb_IOs WHERE ProductCode=@ProductCode) GOTO ERR --检查出库

    IF EXISTS(SELECT * FROM dbo.tb_POs WHERE ProductCode=@ProductCode) GOTO ERR --检查采购订单

    IF EXISTS(SELECT * FROM dbo.tb_SOs WHERE StockCode  =@ProductCode) GOTO ERR --检查销售订单


GOTO
 FINISHED


--标签:业务往来中使用该货品

ERR: 

ROLLBACK TRANSACTION

RAISERROR(@MSG,10,1)


--事务完成标签:不做任何处理

FINISHED:


END









C/S框架网|原创精神.创造价值.打造精品

扫一扫加微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务

版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
C/S框架网
上一篇:解决方案:WCF客户端无法获取服务端抛出的异常详细信息
下一篇:3.0高级版:客户端无法获取服务端抛出的异常详细信息
评论列表

发表评论

评论内容
昵称:
关联文章

使用触发器控制用户删除业务往来使用基础资料
SQL存储过程:删除基础资料前逻辑判断,检查是否有关联业务数据
删除用户前逻辑判断,检查当前用户是否关联业务数据或创建业务数据
基础资料模块 - 业务提成 - TMS - 物流运输管理系统
SQL获取数据库所有用户自定义存储过程、函数、触发器
基础资料模块 - 客户管理 - TMS - 物流运输管理系统
基础资料模块 - 车辆资料 - TMS - 物流运输管理系统
开发技巧:删除资料保存日志并检查数据是否能删除
C/S开发框架教程:使用基础资料(数据字典)DAL层更新主从表(或多表)数据
C/S Winform开发框架 - 单表基础资料窗体实现主从表资料管理
CSFramework.WebApi令牌管理器(Token Provider)实现添加、删除、刷新令牌过期控制
业务单据上下级权限控制实现
基础资料模块 - 公共资料管理(其他资料) - TMS - 物流运输管理系统
基础资料模块 - 模块主窗体 - TMS - 物流运输管理系统
软件工程框架
开发技巧:您不能删除别人数据!
基础资料模块 - 承运商管理 - 供应商管理 - TMS - 物流运输管理系统
超出了存储过程、函数、触发器或视图最大嵌套层数(最大层数为 32)
如何删除左侧导航栏菜单项?
软件用户授权注册系统 - 管理员工具使用指南

热门标签