--确保用户在插入或更新数据时所提供的WEIGHT值是大于的, --否则给出错误提示并回滚此操作。
create trigger P_Ins on p
for insert , update as if (select weight from inserted)<=0 begin
print '错误' rollback end go
--请测试该触发器。测试方法自定。 insert
into p(pno,pname,color,weight) values('P7','梦园','蓝',-8); update p
set weight=-1 where pno='P1';
--2、创建一个作用在J表上的的触发器J_Update,
--禁止同时修改项目的名称和所在城市,
--并进行相应的错误提示。
create trigger J_Update on j
for update as
if update(jname) and update(city) begin
print '错误' rollback end go
--请测试该触发器。测试方法自定。 update j
set jname='梦园',city='福州' where jno='J1'; --3、首先在数据库中使用SELECT INTO 语句
--从SPJ、J、P表中创建一个新表J_P_QTY。
--表中的属性列包括:工程号、工程名、零件号、零件名及总数量, --其中总数量的值是各工程使用各种零件的数量总和(不考虑零件是由哪个供应商提供的)。 select
j.jno,jname,p.pno,pname,sum(qty) qtys
into J_P_QTY from j,p,spj where j.jno=spj.jno and p.pno=spj.pno group by j.jno,jname,p.pno,pname
--然后创建一个作用在SPJ表上的
Insert型触发器,
--该触发器能完成两项任务: --1)当用户插入的JNO使用的PNO的值在J_P_QTY中不曾存在时禁止插入; --2)每当在SPJ表中插入一条合理记录时,
--使J_P_QTY表的QTY列的值保持同步更新。
create trigger SPJ_Insert on spj for insert as
declare @jno varchar(6),@pno varchar(6),@qty int select
@jno=jno,@pno=pno,@qty=qty
from inserted
if @pno not in (select pno from J_P_QTY
where jno=@jno) begin
print '错误'
Rollback
(or raiserror('禁止插入',16,1) Rollback transaction) end else
update J_P_QTY set qtys=qtys+@qty
where jno=@jno and pno=@pno go
--请测试该触发器。测试方法自
定。 insert
into spj(sno,pno,jno,qty) values('S1','P2','J1',800);
因篇幅问题不能全部显示,请点此查看更多更全内容