zoukankan      html  css  js  c++  java
  • 触发器2

    Sql Server 触发器(二)
    2009-04-15 09:59

    接(一)

    --触发器示例2

    /*

    创建触发器[T_INSERT_卷烟销售表],该触发器较复杂。

    说明: 每当[卷烟库存表]发生 INSERT 动作,则引发该触发器。

    触发器功能: 实现业务规则。

    业务规则: 如果销售的卷烟品牌不存在库存或者库存为零,则返回错误。

    否则则自动减少[卷烟库存表]中对应品牌卷烟的库存数量和库存金额。

    */

    IF EXISTS (SELECT NAME FROM SYSOBJECTS WHERE XTYPE = ’TR’ AND NAME = ’T_INSERT_卷烟销售表’)

    DROP TRIGGER T_INSERT_卷烟销售表

    GO

    CREATE TRIGGER T_INSERT_卷烟销售表

    ON 卷烟销售表

    FOR INSERT

    AS

    BEGIN TRANSACTION

    --检查数据的合法性:销售的卷烟是否有库存,或者库存是否大于零

    IF NOT EXISTS (

    SELECT 库存数量

    FROM 卷烟库存表

    WHERE 卷烟品牌 IN (SELECT 卷烟品牌 FROM INSERTED)

    )

    BEGIN

    --返回错误提示

    RAISERROR(’错误!该卷烟不存在库存,不能销售。’,16,1)

    --回滚事务

    ROLLBACK

    RETURN

    END

    IF EXISTS (

    SELECT 库存数量

    FROM 卷烟库存表

    WHERE 卷烟品牌 IN (SELECT 卷烟品牌 FROM INSERTED) AND

    库存数量 <= 0

    )

    BEGIN

    --返回错误提示

    RAISERROR(’错误!该卷烟库存小于等于0,不能销售。’,16,1)

    --回滚事务

    ROLLBACK

    RETURN

    END

    --对合法的数据进行处理

    --强制执行下列语句,保证业务规则

    UPDATE 卷烟销售表

    SET 销售金额 = 销售数量 * 销售单价

    WHERE 卷烟品牌 IN (SELECT 卷烟品牌 FROM INSERTED)

    DECLARE @卷烟品牌 VARCHAR(40)

    SET @卷烟品牌 = (SELECT 卷烟品牌 FROM INSERTED)

    DECLARE @销售数量 MONEY

    SET @销售数量 = (SELECT 销售数量 FROM INSERTED)

    UPDATE 卷烟库存表

    SET 库存数量 = 库存数量 - @销售数量,

    库存金额 = (库存数量 - @销售数量)*库存单价

    WHERE 卷烟品牌 = @卷烟品牌

    COMMIT TRANSACTION

    GO

    --请大家自行跟踪[卷烟库存表][卷烟销售表]的数据变化。

    --针对[卷烟销售表],插入第一条测试数据,该数据是正常的。

    INSERT INTO 卷烟销售表(卷烟品牌,购货商,销售数量,销售单价,销售金额)

    SELECT ’红塔山新势力’,’某购货商’,10,12,1200

    GO

    --针对[卷烟销售表],插入第二条测试数据,该数据 销售金额 不等于 销售单价 * 销售数量。

    --触发器将自动更正数据,使 销售金额 等于 销售单价 * 销售数量。

    INSERT INTO 卷烟销售表(卷烟品牌,购货商,销售数量,销售单价,销售金额)

    SELECT ’红塔山人为峰’,’某购货商’,10,22,2000

    GO

  • 相关阅读:
    攻击方法
    Paillier 同态加密方案
    $EL Gamal$ 密码方案的椭圆曲线形式
    【hbase】hbase的基本使用
    【linux】创建用户,查看用户
    【linux】删除命令
    【linux】上传文件也可以直接拖动文件到xshell中
    【linux】安装pip时报错
    【Linux】界面快捷键
    【linux】Ubuntu无法下载mysql
  • 原文地址:https://www.cnblogs.com/xianqingzh/p/1447145.html
Copyright © 2011-2022 走看看