Create Trigger tg_借书触发器名 on [借阅记录] For Insert
as
update [借阅记录] set [借阅记录].借书日期=getdate(), [借阅记录].应还日期=getdate()+[读者].可借天数
from [借阅记录] inner join [读者] on [借阅记录].读者卡号=[读者].读者卡号
where [借阅记录] in(SELECT [借阅记录] FROM INSERTED)
update [图书] set [图书].在库数量=[图书].在库数量-1
where [图书].图书号 in (select 图书号 from Inserted)
update [读者] set [读者].可错数量=[读者].可错数量-1
where [读者].读者卡号 in (select 读者卡号 from Inserted)
2、--------------------这是分割线--------------------------------
create trigger tg_还书触发器名 on [借阅记录] For Update
as
update [图书] set [图书].在库数量=[图书].在库数量+1
where [图书].图书号 in (select 图书号 from Deleted)
update [读者] set [读者].可错数量=[读者].可错数量+1
where [读者].读者卡号 in (select 读者卡号 from Deleted)
--超期时插入到超期记录表
if(select 1 from Deleted where 应还日期<getdate())
begin
--insert into 超期记录表(编号,读者卡号,超期天数,超期金额) values(…………)
-----题目中没给出超期金额算法,编号应该是自动不应该手动插入。
end
3、---------这是分割线--------------------
create trigger tr_插入读者触发器名 on [读者] For Insert
as
if(select 1 from Inserted where 类型='学生')
begin
update [读者] set 可借天数=30 where 读者卡号 in(select 读者卡号 from Inserted)
end
else
begin
update [读者] set 可借天数=60 where 读者卡号 in(select 读者卡号 from Inserted)
end
注释:触发器语句中使用了两种特殊的表:deleted 表和 inserted 表。
Deleted 表用于存储 DELETE 和 UPDATE 语句所影响的行的复本。在执行 DELETE 或 UPDATE 语句时,行从触发器表中删除,并传输到 deleted 表中。Deleted 表和触发器表通常没有相同的行。
Inserted 表用于存储 INSERT 和 UPDATE 语句所影响的行的副本。在一个插入或更新事务处理中,新建行被同时添加到 inserted 表和触发器表中。Inserted 表中的行是触发器表中新行的副本。
---创建测试表:Create Table MyTest(
id int identity(1,1) not null primary key,
[name] varchar(100) null
)
--创建触发器:
CREATE TRIGGER trigtest--创建触发器trigtest
ON mytest--在表mytest上建
for INSERT,DELETE,UPDATE--为插入,删除,修改
AS
BEGIN
declare @a int,
@b int,
@id int,
@name varchar(100),
@oldId int,--原ID号
@oldName varchar(100)--原来的name
set @a=0
set @b=0
if exists(select * from inserted)--如果存在插入新的数据则设置@a=1
begin
set @a=1
end
if exists(select * from deleted)--如果存在删除数据则设置@b=1
begin
set @b=1
end
if (@a=1)and(@b=0)--新增:当插入表inserted存在数据而删除表deleted不存数据时,为新增 *** 作。
begin
select @id=id,@name=name from inserted
print '增加了ID号为【'+cast(@id as varchar(5))+'】Name为【'+@name+'】的数据!'
end
if (@a=1)and(@b=1)--修改:当插入表insertedt和删除表deleted都存在数据时,为修改 *** 作。
begin
select @id=id,@name=name from inserted
select @id=id,@oldname=name from deleted
print '修改了ID号为【'+cast(@id as varchar(5))+'】的数据Name由【'+@oldname+'】变为【'+@name+'】'
end
if (@a=0)and(@b=1)--删除:当插入表inserted不存在数据而删除表deleted存在数据时,为删除 *** 作。
begin
select @id=id,@name=name from deleted
print '删除了ID号为【'+cast(@id as varchar(5))+'】Name为【'+@name+'】的数据!'
end
END
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)