T-SQL触发器的研究

关于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就没有反应了。所以,理论不等于实际,毕竟是人自己做出来的东西,里面嵌入了人的思想,想要认识个人做出来的东西还要去实际问题实际分析,不可以单单用自然科学的推导。有点啰嗦。

你可能感兴趣的:(t-sql)