其步骤就是:利用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 ([姓名],[出生日期] )
VALUES('李晓峰2',6082,'计算机2','2013-05-05')
INSERT INTO [DBO].XINXIN_TAB ([姓名],[出生日期] )
VALUES('李晓峰3',6083,'计算机3','2013-05-06')
INSERT INTO [DBO].XINXIN_TAB ([姓名],[出生日期] )
VALUES('张晓',6084,'女','美术','2013-05-07')
--插入【FENSHU_TAB】表中的5条记录
INSERT INTO [DBO].FENSHU_TAB ([学号],[语文],[数学],[英语] )
VALUES(6080,99.5,98.6,59.2)
INSERT INTO [DBO].FENSHU_TAB ([学号],[英语] )
VALUES(6081,93.5,94.3,55.8)
INSERT INTO [DBO].FENSHU_TAB ([学号],[英语] )
VALUES(6082,96.5,78.6,58.5)
INSERT INTO [DBO].FENSHU_TAB ([学号],[英语] )
VALUES(6083,68.4,89.2)
INSERT INTO [DBO].FENSHU_TAB ([学号],[英语] )
VALUES(6084,99.7,98.7,59.4)
GO
【信息表】的数据:
【明细分数表】的数据:
2.2.运算记录【综合分数表】的数据:
【综合分数表】的数据:
3.1.1.创建3个表关联的视图:
查看创建的视图:
3.2.1.通过视图修改多个数据表的信息????:
结果:
下面就写个利用触发器对其多表进行更新的方法:
a.这里就利用instead of 代替触发来代替对各表中的字段内的信息进行修改:
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
--找出视图中的字段对应相应表的字段
/因为视图中的[姓名]/[班级]/[出生日期]字段是XINXIN_TAB 中的字段,故修改【XINXIN_TAB】中对应的字段
数据之/
UPDATE[DBO].XINXIN_TAB
SET [姓名]=@XINGMING,[班级]=@BANJI,[出生日期]=@CHUSHENGRIQI
WHERE[学号]=@XUEHAO
--道理同上
UPDATE[DBO].FENSHU_TAB
SET[学号]=@XUEHAO
WHERE[学号]=@XUEHAO
--道理同上
UPDATE[DBO].ZHONGHE_TAB
SET[平均分]=@AVGFEN,[总分]=@ZONGFEN
WHERE[学号]=@XUEHAO
--修改完成后就开始筛选【inserted】表中下一条数据记录
SELECT @XUEHAO =MIN([学号])FROM[inserted] WHERE[学号]>@XUEHAO
--然后给while中判断
END
GO
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
希望我写的能为你解决一点问题,还望指教!谢谢!
原文链接:https://www.f2er.com/mssql/62772.html