SQL Server 利用触发器对多表视图进行更新的实现方法
其步骤就是:利用update操作触发器产生的2个虚拟表【inserted】用来存储修改的数据信息和【deleted】表,然后将对应的数据更新到对应数据表中的字段信息中; 1.首先创建3个表: a.信息表: b.明细分数表: c.综合分数表: 2.1.【信息表】和【明细分数表】插入对应表中的数据: INSERT INTO [DBO].XINXIN_TAB ([姓名],[出生日期] )VALUES('李晓峰1',6081,'计算机1','2013-05-04') INSERT INTO [DBO].XINXIN_TAB ([姓名],[出生日期] ) INSERT INTO [DBO].XINXIN_TAB ([姓名],[出生日期] ) INSERT INTO [DBO].XINXIN_TAB ([姓名],[出生日期] ) --插入【FENSHU_TAB】表中的5条记录 INSERT INTO [DBO].FENSHU_TAB ([学号],[英语] ) INSERT INTO [DBO].FENSHU_TAB ([学号],[英语] ) INSERT INTO [DBO].FENSHU_TAB ([学号],[英语] ) INSERT INTO [DBO].FENSHU_TAB ([学号],[英语] ) 【信息表】的数据: 【明细分数表】的数据: 2.2.运算记录【综合分数表】的数据: =6080 AND @I_WHILE_XUEHAO <6085) BEGIN --求取【平均分】,【总分】,【姓名】并存在声明的变量中 SELECT @ZONGFEN =(F.语文 +F.数学 +F.英语 ),@AVGFEN =(F.语文 +F.数学 +F.英语 )/3,@XINGMING =X.姓名 FROM[DBO].XINXIN_TAB AS X INNER JOIN [DBO].FENSHU_TAB AS F ON X.学号 =F.学号 WHERE X.学号 =@I_WHILE_XUEHAO --与【学号同步】 --将其变量的数据插入到【ZHONGHE_TAB】的对应字段上 INSERT INTO [DBO].ZHONGHE_TAB ([姓名],[平均分],[总分] ) VALUES(@XINGMING,@I_WHILE_XUEHAO,@AVGFEN,@ZONGFEN ) SELECT @I_WHILE_XUEHAO +=1; --与【学号同步】 END GO【综合分数表】的数据: 3.1.1.创建3个表关联的视图: 查看创建的视图: 3.2.1.通过视图修改多个数据表的信息????: 结果: 下面就写个利用触发器对其多表进行更新的方法:a.这里就利用instead of 代替触发来代替对各表中的字段内的信息进行修改: WHILE(@XUEHAO IS NOT NULL)BEGIN --将【inserted】表中的数据存放到相应的变量中 SELECT @XUEHAO =MIN([学号])FROM[inserted] WHERE [学号]=@XUEHAO SELECT @XINGMING=[姓名] FROM[inserted] WHERE[学号] =@XUEHAO SELECT @AVGFEN=[平均分]FROM[inserted] WHERE[学号] =@XUEHAO SELECT @ZONGFEN=[总分] FROM[inserted] WHERE[学号] =@XUEHAO SELECT @BANJI =[班级]FROM[inserted] WHERE[学号] =@XUEHAO SELECT @CHUSHENGRIQI=[出生日期]FROM[inserted] WHERE[学号] =@XUEHAO --找出视图中的字段对应相应表的字段 --道理同上 --道理同上 --修改完成后就开始筛选【inserted】表中下一条数据记录 a1.注意的是视图不是数据表没有存放数据,将从【inserted】表中的数据提取后赋给对应数据表内的字段中; 对象资源管理器中的图示: 3.万事俱备,开始通过视图修改多表中的数据(验证): a UPDATE[DBO].SHITU_FFENSHU_XINXI--修改【SHITU_FFENSHU_XINXI】中对应的字段数据 SET[姓名]='liyifeng',[平均分]=66.6,[总分]=88.8,[班级]='计算机SQLServer',[出生日期]='2013-05-05' --修改筛选 WHERE[学号]=6080 GO --查看修改后的视图数据信息 SELECT* FROM[DBO].SHITU_FFENSHU_XINXI GO 修改前后对比的结果图示: 修改后的数据表中的数据: 4.触发器在数据库里面就像颗炸弹一样,只要满足气要求就会被触发,就会对数据库里面的数据进行触发修改,所以不需要室就尽量将其关闭掉,用的时候就将其开启: 关闭: 开启: GO 希望我写的能为你解决一点问题,还望指教!谢谢! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |