触发器_菩提树_百度空间

--1定义一触发器,要求当订货数量超过该产品库存数量时,拒绝订货,同时给出提示信息。

create trigger t3 on OrderDetails
for insert
as
begin
declare @stocks int,@quantity int
select @quantity=quantity from inserted
select @stocks=stocks from products,inserted where products.productid=inserted.productid
if @quantity>@stocks
begin
rollback transaction
raiserror('库存量不足!',16,1)
end
end

--测试触发器
insert into OrderDetails values('01','01','12',null)
select * from OrderDetails


--2.创建一触发器,要求当删除orders表中的记录时,自动把订单详细信息表中的相关记录删除.

create trigger t4 on orders
for delete
as
declare @orderid int
select @orderid=orderid from deleted
print '开始查找并删除表orderdetails中的相关记录。。。。'
delete from orderdetails where
print '删除表orderdetails中的的相关记录条数为'+str(@@rowcount)+'条'


--测试触发器
delete from orders where orderid='1' (注:测试之前要把相关表的关联删除)


--3.创建一触发器,要求当客户订货时(即在订单详细信息表中插入记录时),自动修改产品信息表中的库存量.

create trigger t5 on orderdetails
for insert
as
update products set stocks=stocks-quantity   from products,inserted where products.productid=inserted.productid

--测试触发器
insert into orderdetails values('02','01','5',null)

select * from products where productid='01'

--4.你在开发某公司的管理信息系统,其中要跟踪经理的购买情况。每个经理在预算表中都有一个记录。
--预算表包含列“经理代号”、列“预算总金额”、列“现有预算金额”;
--购买表包含列“购买代号”、列“购买金额”,列“经理代号”。
--每次购买都要与“现有预算金额”作比较,当该次购买的“购买金额”小于“现有预算金额”时,
--才允许插入到购买表中(一次购买只插入一个记录),同时自动更改预算表的“现有预算金额”。
--请在购买表上编写一个触发器,完成该任务。
CREATE TRIGGER t1 ON 购买表
FOR INSERT
AS
BEGIN
   IF (SELECT count(*) FROM Inserted) <> 1
      BEGIN
        RAISERROR('一次购买只允许插入一个记录!',16, 1)
        ROLLBACK TRANSACTION
        RETURN
      END
   IF ( SELECT a.现有预算金额-b.购买金额
        FROM 预算表 AS a INNER JOIN
             Inserted AS b ON a.经理代号=b.经理代号)<0
      BEGIN
         RAISERROR('现有预算金额不足支付购买金额 !',16, 1)
         ROLLBACK TRANSACTION
         RETURN
      END
   UPDATE 预算表
   SET 现有预算金额 = a.现有预算金额-b.购买金额
   FROM 预算表 AS a INNER JOIN
             Inserted AS b ON a.经理代号=b.经理代号
END


--5.假设你在开发一个图书馆管理系统,借阅者表中存储了‘借书证号’、‘姓名’、‘类型’、‘可借本数’、‘借阅期限’等信息,
--借书表中存储了‘借书证号’、‘图书编号’、‘借书日期’、‘应还日期’等,还书表中存储了‘借书证号’、‘图书编号’、
--‘还书时间’、‘是否超期’、‘罚款金额’,请你编写触发器:
--(1)学生可借书数量为5本,当某学生累计借书超过5本时限制其借书

create trigger t2 on 借书表 for insert
as
declare @k int
declare @j int
select @k=可借本数 from 借阅者表,inserted    where     借阅者表.借书证号=inserted.借书证号
select @j= Count(*) from 借书表,inserted    where     借书表.借书证号=inserted.借书证号  
if(@j >@k )
begin
rollback transaction
print'累计借阅数量超过可借本数!'
end


--(2)如果还书时超期,自动计算其罚款金额(按每天0.5元计算)
create trigger t3 on 还书表 after insert
as

declare @y datetime
declare @h datetime
declare @t int
select @y= 应还日期 from 借书表, inserted where   借书表.图书编号=inserted.图书编号 and   借书表.借书证号=inserted.借书证号
select @h =还书时间 from inserted
    set @t=DATEDIFF(dd,@y ,@h )
if(@t>0)
     update 还书表 set 罚款金额     from 还书表,inserted     where    
还书表.借书证号=inserted.借书证号 and    还书表.图书编号=inserted.图书编号

--6. 假设你在开发一个商务网站,管理员在进行后台订单处理时,对已成交的订单要实现自动修改其商品库存数量,
--请编写触发器实现该功能。(数据库参考mobile1)

create trigger t4 on orderdetail for update
as
if update(status)
update product set product.quantity=product.quantity-inserted.quantity from   product,inserted  
               where product.productid=inserted.productid


update orderdetail set status=1 where orderid='38' and productid='11'



郑重声明:资讯 【触发器_菩提树_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——