- 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