第七章SQLServer 2012視圖、存儲、觸發(fā)器
視圖是一個(gè)虛似表,和真實(shí)的表一樣,視圖包含一系列帶有名稱的列和行數(shù)據(jù)。為了屏蔽數(shù)據(jù)的復(fù)雜性,簡化用戶對數(shù)據(jù)的操作,保護(hù)數(shù)據(jù)安全,常常創(chuàng)建不同的視圖。
一、視圖的作用
1、使用視圖,可以簡化數(shù)據(jù)操作。
2、可以合并分離的數(shù)據(jù),創(chuàng)建分區(qū)視圖
3、視圖能夠?qū)C(jī)密數(shù)據(jù)提供安全保護(hù)
二、通過簡單實(shí)例來了解什么是視圖
CREATEVIEW ?V1 ?AS
SELECT學(xué)生.學(xué)號,學(xué)生.姓名,班級.班級名稱,專業(yè).專業(yè)名稱,系部.系部名稱
FROM 學(xué)生
join班級ON 學(xué)生.班級代碼=班級.班級代碼
join專業(yè)ON 班級.專業(yè)代碼=專業(yè).專業(yè)代碼
join系部ON 專業(yè).系部代碼=系部.系部代碼
SQLServer 2005 視圖
三、視圖的操作
創(chuàng)建視圖有以下限制
(1)只能在當(dāng)前數(shù)據(jù)庫中創(chuàng)建
(2)用戶創(chuàng)建視圖嵌套不能超過32層
(3)不能將規(guī)則或默認(rèn)定義與視圖相關(guān)
(4)定義視圖查詢不能包含COMPUTE語句和COMPUTEBY 語句
1、在”對象資源管理器”窗口中,右擊圖據(jù)庫下的”視圖”結(jié)點(diǎn),在彈出的快捷菜單中選擇”新建視圖” 命令。
2、使用T-SQL語句創(chuàng)建視圖
CREATEVIEW ?視圖名
WITH[ENCRYPTION] [SCHEMABTNDING]
AS查詢語句
[ENCRYPTION] 加密視圖
[SCHEMABTNDING] ? 視圖及表的架構(gòu)綁定
3、使用視圖修改數(shù)據(jù)
修改數(shù)據(jù)包括插入INSERT、刪除DELETE、修改UPDATE 三類
4、刪除視圖
刪除視圖通常需要顯式地使用DROPVIEW 語句進(jìn)行。
5、系統(tǒng)存儲過程查看視圖
EXECsp_helptext
四、存儲過程與觸發(fā)器
存儲過程由一組預(yù)先編輯好的SQL語句組成。將其放在服務(wù)器上,由用戶通過指定存儲過程的名稱來執(zhí)行。
觸發(fā)器是一種特殊類型的存儲過程,它不是由用戶直接調(diào)用的,而是當(dāng)用戶對數(shù)據(jù)進(jìn)行操作 ?(包括數(shù)據(jù)的INSERT、UPDATE、DELETE操作)時(shí)自動(dòng)執(zhí)行。
五、創(chuàng)建、執(zhí)行、修改、刪除簡單的存儲過程
在SQLServer 中通常可以使用查詢分析器執(zhí)行SQL語句創(chuàng)建存儲過程。
CREATEPROC 儲存過程名
[@parameterdata_type] [=default] [OUTPUT][,….]
AS
SQL語句
六、執(zhí)行存儲過程
對存儲在服務(wù)器上的存儲過程,可以使用EXECUTE命令或其名稱執(zhí)行。
七、查看存儲過程
對用戶建立存儲過程,可以使用對象資源管理器或系統(tǒng)存儲過程查看該存儲過程的定義。
1、使用對象資源管理器查看存儲過程,在“對象資源管理器”窗口中,展開“數(shù)據(jù)庫”結(jié)點(diǎn)。選擇相應(yīng)的數(shù)據(jù)庫,展開“可編程性”,“存儲過程”結(jié)點(diǎn)。
2、使用系統(tǒng)存儲過程查看存儲過程可以使用sp_helptext、sp_depends、sp_help等系統(tǒng)存儲過程來查看存儲過程的不用信息。
八、刪除存儲過程
當(dāng)存儲過程不再需要時(shí),可以使用對象資源管理器或 DROP PROCEDURE語句將其刪除。
九、觸發(fā)器
觸發(fā)器的優(yōu)點(diǎn)
(1)觸發(fā)器自動(dòng)執(zhí)行.在對表中的數(shù)據(jù)做了任何修改之后立即被激活.
(2)觸發(fā)器能夠?qū)?shù)據(jù)庫中的相關(guān)表實(shí)現(xiàn)級聯(lián)更改.
十、臨時(shí)表
inserted表和deleted表用于存放對表中數(shù)據(jù)行的修改信息。他們是觸發(fā)器執(zhí)行時(shí)自動(dòng)創(chuàng)建的。當(dāng)觸發(fā)器工作完成,它們也被刪除。它們是只讀表,不能向它們寫入內(nèi)容。
inserted表:用來存儲INSERT和UPDATE語句所影響的行的副本。意思就是在inserted表中臨時(shí)保存了被插入或被更新后的記錄行。在執(zhí)行INSERT 或UPDATE語句時(shí),新加行被同時(shí)添加到inserted表和觸發(fā)器表中。
deleted表:用來存儲DELETE和UPDATE語句所影響行的副本。意思是在delete表中臨時(shí)保存了被刪除或被更新前的記錄行。在執(zhí)行DELETE 或UPDATE語句時(shí),行從觸發(fā)器表中刪除,并傳到deleted表中。所以可以從deleted表中檢查刪除的數(shù)據(jù)行是否能刪除。
所以當(dāng)表中某條記錄的某項(xiàng)值發(fā)生變化時(shí),變化前的值已經(jīng)通過系統(tǒng)自動(dòng)創(chuàng)建的臨時(shí)表deleted表和inserted表保存了被刪除行或插入的記錄行的副本。我們可以從這兩個(gè)表中查詢出變化前的值并賦給變量。
十一、使用SQL創(chuàng)建觸發(fā)器
CREATETRIGGER trigger_name
ON{ table | view }
FOR {[INSERT],[DELETE],[UPDATE]}
SQL語句
SQLServer 2005
存儲過程與觸發(fā)器
十二、查看觸發(fā)器信息
SQL Server 提供了一個(gè)專門用于查看表的觸發(fā)器信息的系統(tǒng)存儲 ?
過程sp_helptrigger
十三、刪除觸發(fā)器
當(dāng)不再需要某個(gè)觸發(fā)器時(shí),可以將其刪除。
DROP TRIGGER
