a.这里就利用instead of 代替触发来代替对各表中的字段内的信息进行修改:
USE [SQL-LI]GO
CREATE TRIGGER TRIGG_UPDATE --创建一个upda触发器DML
--关联到[SHITU_FFENSHU_XINXI]视图上
ON[DBO].[SHITU_FFENSHU_XINXI]INSTEAD OF UPDATE --代替触发器执行UPDATE功能;【但是只能定义一个增删改的INSTEAD OF代替触发】。
AS
--声明接受变量用于存储【inserted】表上的数据
DECLARE @XINGMING NVARCHAR(10),@XUEHAO INT,@AVGFEN DECIMAL(3,1),@ZONGFEN DECIMAL(4,1),
@BANJI NVARCHAR(20),@CHUSHENGRIQI DATE;
--筛选【inserted】表中学号最小的一行数据
SELECT @XUEHAO =MIN(学号) FROM[inserted]--遍历【inserted】表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
--找出视图中的字段对应相应表的字段
/*因为视图中的[姓名]/[班级]/[出生日期]字段是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
USE [SQL-LI]--查看未修改前的视图数据信息
SELECT* FROM[DBO].SHITU_FFENSHU_XINXI
GOUPDATE[DBO].SHITU_FFENSHU_XINXI
--修改【SHITU_FFENSHU_XINXI】中对应的字段数据
SET[姓名]='liyifeng' ,[平均分]=66.6 ,[总分]=88.8 ,[班级]='计算机SQLServer' ,[出生日期]='2013-05-05'
--修改筛选
WHERE[学号]=6080










