日期:2014-05-18 浏览次数:20762 次
对冲触发器 tb_发货 编号 订单号 客户名称 品名 型号 发货数量 1 2012001 美的有限公司 电饭锅 小型 1 2 2012001 美的有限公司 电饭锅 小型 1 3 2012001 美的有限公司 电饭锅 中型 1 4 2012001 美的有限公司 电饭锅 中型 1 5 2012001 美的有限公司 电饭锅 大型 1 6 2012001 美的有限公司 电饭锅 大型 1 tb_订单 编号 订单号 客户名称 品名 型号 订购数量 发货数量 未发货数量 订单状态 完成日期 1 2012001 美的有限公司 电饭锅 小型 2 0 2 未完成 null 2 2012001 美的有限公司 电饭锅 中型 2 0 2 未完成 null 3 2012001 美的有限公司 电饭锅 大型 2 0 2 未完成 null tb_发货 增加、删除、更新,自动更新tb_订单 如上例,自动将tb_订单,发货数量、未发货数量填充,并判断未发货数量是否为0,如为零自动将订单状态设置为“完成”,并将完成日期设置
各位大哥大姐、我的数据库里面有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 STUDENT for insert,update,delete as --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 ID=@InsertID,PASSWORD=@InsertID where ID=@DeleteID 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 --insert insert into STUDENT select 1,'aaa' select * from USERID --update update student set sno=2 where sno=1 select * from USERID --delete delete from student select * from USERID
------解决方案--------------------
go if OBJECT_ID('tri_tracy')is not null drop trigger tri_tracy go create trigger tri_tracy on [tb_发货] for insert,update,delete as --如果是插入 if exists(select 1 from inserted) and not exists(select 1 from deleted) begin update [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) begin update [tb_订单] set [发货数量]=[tb_订单].[发货数量]+d.[发货数量],[未发货数量]=[tb_订单].[订购数量]-d.[发货数量], [订单状态]='未完成',[完成日期]=null from deleted d where [tb_订单].[订单号]=d.[订单号] and [tb_订单].[品名]=d.[品名] AND [tb_订单].[型号]=d.[型号] end --如果是修改 if exists(select 1 from inserted) and exists(select