zoukankan      html  css  js  c++  java
  • 使用触发器控制用户删除业务往来中使用的基础资料

    本文转载:http://www.csframework.com/archive/1/arc-1-20120526-1945.htm

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

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

    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






  • 相关阅读:
    下巴肉和脖子肉怎么减肥
    java中compareTo和compare方法之比较,集合中对象的比较
    easyui中combotree只能选子选项,父级不被选中
    java线程总结(2/5)
    流行的框架与新技术
    Spring官网改版后下载
    prepareStatement与Statement的区别
    jQuery li click失效问题
    Flask 启动报错 error: [Errno 10053]
    [linux]CentOS 7 下安装 RabbitMQ
  • 原文地址:https://www.cnblogs.com/51net/p/2843647.html
Copyright © 2011-2022 走看看