这样的触发器该怎么写呢
对冲触发器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,如为零自动将订单状态设置为“完成”,并将完成日期设置
各位大哥大姐、我的数据库里面有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 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 --insertinsert into STUDENT select 1,'aaa'select * from USERID--updateupdate student set sno=2 where sno=1select * from USERID--deletedelete from studentselect * from USERID
[解决办法]
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