当前位置: 代码迷 >> Sql Server >> 这样的触发器该如何写呢
  详细解决方案

这样的触发器该如何写呢

热度:35   发布时间:2016-04-27 13:10:12.0
这样的触发器该怎么写呢
SQL code
对冲触发器tb_发货编号        订单号        客户名称             品名      型号      发货数量1           2012001       美的有限公司         电饭锅    小型         12           2012001       美的有限公司         电饭锅    小型         13           2012001       美的有限公司         电饭锅    中型         14           2012001       美的有限公司         电饭锅    中型         15           2012001       美的有限公司         电饭锅    大型         16           2012001       美的有限公司         电饭锅    大型         1tb_订单编号        订单号        客户名称              品名      型号       订购数量         发货数量          未发货数量       订单状态       完成日期1            2012001       美的有限公司          电饭锅    小型         2                 0                  2            未完成        null2            2012001       美的有限公司          电饭锅    中型         2                 0                  2            未完成        null3            2012001       美的有限公司          电饭锅    大型         2                 0                  2            未完成        nulltb_发货  增加、删除、更新,自动更新tb_订单如上例,自动将tb_订单,发货数量、未发货数量填充,并判断未发货数量是否为0,如为零自动将订单状态设置为“完成”,并将完成日期设置


------解决方案--------------------
以插入为例,其余自己写
create trigger t1
on tb_发货
for insert 
as
update tb_订单
set 发货数量=发货数量+inserted.发货数量,
未发货数量=未发货数量-inserted.发货数量,
状态=case when 未发货数量-inserted.发货数量=0 then '完成' end
日期=getdate()


------解决方案--------------------
以前回答的一个帖子,你参考一下吧

SQL code
各位大哥大姐、我的数据库里面有USERID表(ID(登录ID),PASSWORD(密码),QUANXIAN(权限))和另外一个STUDENT表(SNO(学号),SNAME(姓名)````````)、现在我想建立触发器就当我添加学生(学号)资料时就自动在USERID表中添加相应的ID,密码,权限,ID和学号一样,PASSWORD(密码)也和学号一样,权限是“学生”。 当我修改更新(学号)资料,在USERID表中也修改相应的ID和和PASSWORD。 当我删除学生资料时,在USERID表中也删除相应ID的全部资料。 这个怎么实现啊。。这样的触发器怎么实现、用多个触发器实现也行,希望各位帮帮忙create table STUDENT(SNO int,SNAME nvarchar(10))create table USERID(ID int ,PASSWORD int,QUANXIAN nvarchar(10))Create trigger tr_STUDENT on STUDENTfor insert,update,deleteas --insert IF EXISTS(SELECT 1 FROM inserted) AND NOT EXISTS(SELECT 1 FROM deleted) begin   insert into USERID  select SNO,SNO,'学生' from inserted end  --update IF EXISTS(SELECT 1 FROM inserted) AND EXISTS(SELECT 1 FROM deleted) BEGIN    --USERID有问题,应该有个主键字段,否则在批量更新时,无法找到对应的主键    declare @DeleteID int    declare @InsertID int    select @DeleteID=SNO from deleted    select @InsertID=SNO from inserted    update USERID set [email protected],[email protected] where [email protected] end    --delete  IF NOT EXISTS(SELECT 1 FROM inserted) AND EXISTS(SELECT 1 FROM deleted)  BEGIN   delete A from USERID A,deleted B where A.ID=B.SNO  end  --insertinsert into STUDENT select 1,'aaa'select * from USERID--updateupdate student set sno=2 where sno=1select * from USERID--deletedelete from studentselect * from USERID
------解决方案--------------------
SQL code
goif OBJECT_ID('tri_tracy')is not nulldrop trigger tri_tracygocreate trigger tri_tracy on [tb_发货]for insert,update,deleteas--如果是插入if exists(select 1 from inserted)       and not exists(select 1 from deleted)beginupdate [tb_订单] set [发货数量]=[tb_订单].[发货数量]+I.[发货数量],[未发货数量]=[tb_订单].[订购数量]-I.[发货数量],[订单状态]=(case when ([tb_订单].[订购数量]-I.[发货数量])=0 then '完成' else '未完成' end),[完成日期]=(case when ([tb_订单].[订购数量]-I.[发货数量])=0 then getdate() else null end)from inserted I where [tb_订单].[订单号]=I.[订单号] and [tb_订单].[品名]=I.[品名]AND [tb_订单].[型号]=I.[型号]end--如果是删除if not exists(select 1 from inserted)       and exists(select 1 from deleted)beginupdate [tb_订单] set [发货数量]=[tb_订单].[发货数量]+d.[发货数量],[未发货数量]=[tb_订单].[订购数量]-d.[发货数量],[订单状态]='未完成',[完成日期]=nullfrom deleted d where [tb_订单].[订单号]=d.[订单号] and [tb_订单].[品名]=d.[品名]AND [tb_订单].[型号]=d.[型号]end--如果是修改if exists(select 1 from inserted) and exists(select 1 from deleted)beginupdate [tb_订单] set [发货数量]=[tb_订单].[发货数量]+I.[发货数量],[未发货数量]=[tb_订单].[订购数量]-I.[发货数量],[订单状态]=(case when ([tb_订单].[订购数量]-[tb_订单].[发货数量]-I.[发货数量])=0 then '完成' else '未完成' end),[完成日期]=(case when ([tb_订单].[订购数量]-[tb_订单].[发货数量]-I.[发货数量])=0 then getdate() else null end)from deleted I where [tb_订单].[订单号]=I.[订单号] and [tb_订单].[品名]=I.[品名]AND [tb_订单].[型号]=I.[型号]end
  相关解决方案