亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

SQL Server 利用觸發器對多表視圖進行更新的實現方法

2024-08-31 01:04:16
字體:
來源:轉載
供稿:網友

其步驟就是:利用update操作觸發器產生的2個虛擬表【inserted】用來存儲修改的數據信息和【deleted】表,然后將對應的數據更新到對應數據表中的字段信息中;

觸發器,多表視圖,更新,SQLServer

1.首先創建3個表:

a.信息表:

USE [SQL-LI]BEGIN TRANSACTION CHUANGJIAN_XINXIN_TAB --創建命名為【XINXIN_TAB】的數據表,同時不允許字段為空CREATE TABLE XINXIN_TAB(姓名 NVARCHAR(10) NOT NULL,性別 NVARCHAR(1) NOT NULL,學號 INT NOT NULL,班級 NVARCHAR(20) NOT NULL,出生日期 DATE NOT NULL,CONSTRAINT XUEHAO_YUESU PRIMARY KEY CLUSTERED([學號]ASC))COMMIT TRANSACTION CHUANGJIAN_XINXI_TABGO

b.明細分數表:

USE [SQL-LI] CREATE TABLE FENSHU_TAB([學號] INT NOT NULL,[語文] DECIMAL(3,1) NOT NULL,[數學] DECIMAL(3,1) NOT NULL,[英語] DECIMAL(3,1) NOT NULL)GO

c.綜合分數表:

USE [SQL-LI] CREATE TABLE ZHONGHE_TAB([姓名] NVARCHAR(10) NOT NULL,[學號] INT NOT NULL,[總分] DECIMAL(4,1) NOT NULL,[平均分] DECIMAL(3,1) NOT NULL)GO

2.1.【信息表】和【明細分數表】插入對應表中的數據:

USE [SQL-LI] --插入【XINXIN_TAB】表中的5條記錄INSERT INTO [DBO].XINXIN_TAB ([姓名] ,[學號] ,[性別] ,[班級] ,[出生日期] )VALUES('李曉峰',6080,'男','計算機','2013-05-03')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,99.5,68.4,89.2)INSERT INTO [DBO].FENSHU_TAB ([學號] ,[語文] ,[數學] ,[英語] )VALUES(6084,99.7,98.7,59.4)GO

【信息表】的數據:

觸發器,多表視圖,更新,SQLServer

【明細分數表】的數據:

觸發器,多表視圖,更新,SQLServer

2.2.運算記錄【綜合分數表】的數據:

插入【ZHONGHE_TAB】中的數據USE [SQL-LI] --聲明3個變量分別用來接收【平均分】,【總分】,【姓名】,和一個控制循環的條件變量@I_WHILE_XUEHAODECLARE @I_WHILE_XUEHAO INT,@ZONGFEN DECIMAL(4,1),@AVGFEN DECIMAL(3,1),@XINGMING NVARCHAR(10);SELECT @I_WHILE_XUEHAO =6080;--使這個變量【@I_WHILE_XUEHAO】的值指定在【學號】字段上WHILE(@I_WHILE_XUEHAO >=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;  --與【學號同步】ENDGO

【綜合分數表】的數據:

觸發器,多表視圖,更新,SQLServer

3.1.1.創建3個表關聯的視圖:

USE [SQL-LI] GOCREATE VIEW SHITU_FFENSHU_XINXI(姓名,學號,平均分,總分,班級,出生日期)ASSELECT TOP 800 X.姓名 ,F.學號 ,Z.平均分 ,Z.總分 ,X.班級 ,X.出生日期 FROM[DBO].XINXIN_TAB AS X INNER JOIN [DBO].FENSHU_TAB AS F ON X.學號 =F.學號   INNER JOIN [DBO].ZHONGHE_TAB AS Z ON F.學號 =Z.學號   ORDER BY F.學號 ASC  GO

查看創建的視圖:

觸發器,多表視圖,更新,SQLServer

3.2.1.通過視圖修改多個數據表的信息????:

UPDATE [SQL-LI].[dbo].[SHITU_FFENSHU_XINXI]SET [姓名] = 'aaaaa', --此字段在【信息表】中[平均分] =111  --此次字段在【分數】中WHERE [學號]=6080GO

結果:

觸發器,多表視圖,更新,SQLServer

觸發器,多表視圖,更新,SQLServer

下面就寫個利用觸發器對其多表進行更新的方法:

a.這里就利用instead of 代替觸發來代替對各表中的字段內的信息進行修改:

USE [SQL-LI] GOCREATE 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中判斷 ENDGO

a1.注意的是視圖不是數據表沒有存放數據,將從【inserted】表中的數據提取后賦給對應數據表內的字段中;

觸發器,多表視圖,更新,SQLServer

對象資源管理器中的圖示:

觸發器,多表視圖,更新,SQLServer

 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 GO--查看修改后的視圖數據信息SELECT* FROM[DBO].SHITU_FFENSHU_XINXI GO

修改前后對比的結果圖示:

觸發器,多表視圖,更新,SQLServer

修改后的數據表中的數據:

USE [SQL-LI] SELECT* FROM[XINXIN_TAB] WHERE[學號]=6080SELECT* FROM[FENSHU_TAB] WHERE[學號]=6080SELECT* FROM[ZHONGHE_TAB] WHERE[學號]=6080GO

觸發器,多表視圖,更新,SQLServer

4.觸發器在數據庫里面就像顆炸彈一樣,只要滿足氣要求就會被觸發,就會對數據庫里面的數據進行觸發修改,所以不需要室就盡量將其關閉掉,用的時候就將其開啟:

關閉:

USE [SQL-LI] GODISABLE TRIGGER [DBO].TRIGG_UPDATE --關閉觸發器【TRIGG_UPDATE】ON SHITU_FFENSHU_XINXIGO

觸發器,多表視圖,更新,SQLServer

開啟:

USE [SQL-LI] GOENABLE TRIGGER [DBO].TRIGG_UPDATE --開啟觸發器【TRIGG_UPDATE】ON[DBO].[SHITU_FFENSHU_XINXI] --觸發器所在的視圖GO

觸發器,多表視圖,更新,SQLServer

GO

希望我寫的能為你解決一點問題,還望指教!謝謝!

 

注:相關教程知識閱讀請移步到MSSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲片国产一区一级在线观看| 免费不卡欧美自拍视频| 在线电影欧美日韩一区二区私密| 欧美性猛交xxxx免费看久久久| 欧美超级乱淫片喷水| 国产精品一区二区三| 日韩成人在线视频| 亚洲aⅴ男人的天堂在线观看| 国产黑人绿帽在线第一区| 亚洲电影免费在线观看| 日韩有码视频在线| 91精品国产色综合久久不卡98| 国产成人avxxxxx在线看| 成人国产精品一区| 欧美富婆性猛交| 欧美日韩国产综合新一区| 日韩在线免费av| 久久精品国产视频| 97成人精品视频在线观看| 欧美高清在线视频观看不卡| 成人国产精品久久久久久亚洲| 国产精品久久色| 亚洲欧美国产制服动漫| 精品久久久香蕉免费精品视频| 国产精品99久久久久久白浆小说| 亚洲自拍在线观看| 一区二区三区久久精品| 久久久久久久久久久久av| 欧美日韩成人网| 亚洲综合日韩在线| 性欧美亚洲xxxx乳在线观看| 日韩电影免费在线观看中文字幕| 成人黄色av网| 久久亚洲国产精品| 超碰日本道色综合久久综合| 国产成人aa精品一区在线播放| 国产一区二区三区视频| 精品久久久久久国产91| 欧美大片免费观看| 91色视频在线观看| 国产啪精品视频网站| 欧美激情videos| 久久精品国产一区二区三区| 国产97人人超碰caoprom| 欧美综合一区第一页| 亚洲国产精品系列| 97色在线观看免费视频| 亚洲新中文字幕| 亚洲香蕉成人av网站在线观看| 北条麻妃一区二区三区中文字幕| 青青草国产精品一区二区| 一区二区三区四区视频| 全亚洲最色的网站在线观看| 亚洲第一网站免费视频| 91精品视频一区| 国产精品视频导航| 欧美激情一级欧美精品| 日韩视频免费在线| 久久精品视频免费播放| 欧美壮男野外gaytube| 在线电影av不卡网址| 国产精品av电影| 亲爱的老师9免费观看全集电视剧| 麻豆国产精品va在线观看不卡| 久久精品99久久久久久久久| 91在线观看免费网站| 国产精品九九久久久久久久| 日本在线观看天堂男亚洲| 久久午夜a级毛片| 国产精品嫩草影院久久久| 成人做爰www免费看视频网站| 亚洲欧美日韩另类| 亚洲综合av影视| 亚洲人成网站999久久久综合| 91精品视频在线| 日本午夜人人精品| 亚洲一区二区久久久久久久| 亚洲黄色片网站| 狠狠躁夜夜躁人人爽超碰91| 中文字幕日韩欧美精品在线观看| 成人激情黄色网| 亚洲 日韩 国产第一| 91在线观看欧美日韩| 国产欧美久久一区二区| 欧美日韩激情美女| 久色乳综合思思在线视频| 九九热最新视频//这里只有精品| 人体精品一二三区| 久久精品青青大伊人av| 欧美午夜精品久久久久久久| 日韩中文字幕免费| 亚洲免费电影一区| 国产v综合v亚洲欧美久久| 欧美日韩免费一区| 亚洲精品720p| 午夜精品福利在线观看| 久久69精品久久久久久国产越南| 日韩在线不卡视频| 国产精品黄页免费高清在线观看| 亚洲日本成人女熟在线观看| 成年无码av片在线| 国产做受高潮69| 亚洲成人a**站| 欧美成人中文字幕在线| 欧美日韩一区二区三区在线免费观看| 91精品国产91久久久久| 中文字幕日韩视频| 91大神在线播放精品| 国产成人高潮免费观看精品| 久久久久亚洲精品| 精品调教chinesegay| 亚洲最大福利视频网| 中文字幕成人精品久久不卡| 国外成人性视频| 亚洲精品wwwww| 久久99久久99精品中文字幕| 国产日韩欧美电影在线观看| 日韩国产高清污视频在线观看| 91精品视频播放| 久久久久国产精品免费网站| 欧洲中文字幕国产精品| 爱福利视频一区| 91精品啪aⅴ在线观看国产| 欧美亚洲国产另类| 久久精品视频一| 中文字幕欧美专区| 久久五月情影视| 日日噜噜噜夜夜爽亚洲精品| 日韩精品中文字幕久久臀| 欧美性xxxxxxx| 一区二区在线视频| 欧美人交a欧美精品| 超碰日本道色综合久久综合| 91精品视频免费观看| 久久中文字幕一区| 国产精品久久久久国产a级| 国产精品欧美日韩| 午夜精品久久久久久久99热浪潮| 国产一区二区三区在线免费观看| 国产精品日日做人人爱| 在线精品视频视频中文字幕| 91高潮在线观看| 亚洲视频777| 97在线观看免费高清| 国产成人涩涩涩视频在线观看| 亚洲香蕉伊综合在人在线视看| 久久成人这里只有精品| 日本高清+成人网在线观看| 久久久在线观看| 日韩毛片在线观看| 欧美大肥婆大肥bbbbb| 亚洲成人黄色在线观看| 日本伊人精品一区二区三区介绍| 中文字幕欧美视频在线| 中文字幕无线精品亚洲乱码一区| 日韩精品一二三四区| 91香蕉嫩草神马影院在线观看| 欧美高清视频在线播放| 精品日韩视频在线观看| 亚洲欧美国产精品专区久久| 欧美综合在线第二页| 91免费看片在线| 精品久久久久久中文字幕一区奶水| 国产精品美女主播|