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