认清事物的本质-简单

博客园 首页 新随笔 联系 订阅 管理

关于update和insert动作的研究。

下面是实验用的建表代码

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tbl1]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[tbl1]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tbl2]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[tbl2]
GO

CREATE TABLE [dbo].[tbl1] (
	[item_number] [int] NULL ,
	[item_quality] [int] NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[tbl2] (
	[item_number] [int] NULL ,
	[item_quality] [int] NULL 
) ON [PRIMARY]
GO
建好表后自己随便插入几个数就可以了。下面是触发器的代码:
create trigger test_update
on tbl1
for update
as
declare @quality int
if update(item_quality)
begin
select @quality=sum(item_quality) from tbl1
update tbl2 set item_quality=@quality where item_number=1
end

这个触发器的作用是当tbl1里面的已有记录的数据得到更新时,重新计算总值并将结果更新到tbl2.

create trigger test_insert
on tbl1
for insert
as
declare @quality int
begin
select @quality=sum(item_quality) from tbl1
update tbl2 set item_quality=@quality where item_number=1
end

这个触发器的作用是当tbl1里面的增加新的记录时,重新计算总值并将结果更新到tbl2.

本代码经过试验,切实可行。

写在最后:我做这个实验的目的是想确定,当更新已有记录时,sum函数计算的时机是在数据更新之前还是之后。结果是之后。

另外,这两个触发器可以写在一起,我这里是为了方便,同时也为了以后看起来清楚,便于维护。

update的实质是删除原记录之后insert新记录,也就是说理论只要有上面的第二个触发器,那么update事件发生的时候也会触发事件,但是如果我们把第一个update触发器删除,会发现现在update就没有反应了。所以,理论不等于实际,毕竟是人自己做出来的东西,里面嵌入了人的思想,想要认识个人做出来的东西还要去实际问题实际分析,不可以单单用自然科学的推导。有点啰嗦。

posted on 2009-06-13 15:40  萧冲  阅读(622)  评论(0编辑  收藏  举报