




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1
第7章創(chuàng)建和管理數(shù)據(jù)庫對象第7章創(chuàng)建和管理數(shù)據(jù)庫對象
7.1創(chuàng)建和管理視圖7.2創(chuàng)建和管理存儲過程7.3創(chuàng)建和管理觸發(fā)器7.4創(chuàng)建和管理關(guān)系圖7.5游標(biāo)2
數(shù)據(jù)庫對象的創(chuàng)建和維護主要是指除表對象以外的數(shù)據(jù)庫其它對象,如索引、視圖、觸發(fā)器、存儲過程及關(guān)系圖的創(chuàng)建和維護。索引的創(chuàng)建與維護在第6章已經(jīng)講述,本章將介紹其它幾個對象的創(chuàng)建與維護。3視圖是從一個或幾個基表中導(dǎo)出的表,是一個在數(shù)據(jù)庫中并不存在的虛擬表,數(shù)據(jù)庫中存放的是視圖的邏輯定義,而不存放視圖對應(yīng)的數(shù)據(jù)。視圖是由查詢數(shù)據(jù)庫的一個或多個表產(chǎn)生的,它限制了用戶所能看到和修改的數(shù)據(jù),因此,視圖可以用來控制用戶對數(shù)據(jù)的訪問,即可以按權(quán)限和需要選擇允許用戶瀏覽的數(shù)據(jù),構(gòu)成一個視圖,使用視圖能給訪問數(shù)據(jù)庫帶來更大的靈活性和安全性。4
存儲過程是為完成特定的功能而匯集在一起的一組命令,是經(jīng)過編譯后存儲在數(shù)據(jù)庫中的SQL程序,可由應(yīng)用程序通過一個調(diào)用來執(zhí)行。觸發(fā)器是用戶所定義的SQL事務(wù)命令的集合。當(dāng)對一個表進行相關(guān)的插入、更改、刪除操作時,這組命令就會自動執(zhí)行。關(guān)系圖是形象、直觀地展示數(shù)據(jù)庫表之間的關(guān)聯(lián)關(guān)系,利用關(guān)系圖可以編輯表和表之間的關(guān)系,建立表和表之間的外(部)鍵約束。567.1創(chuàng)建和管理視圖
視圖作為一種基本的數(shù)據(jù)庫對象,是查詢一個表或多個表的另一種方法,它是通過把預(yù)先定義的查詢存儲在數(shù)據(jù)庫中,構(gòu)成視圖,然后可以在查詢語句中調(diào)用它。77.1.1視圖1.視圖的概念視圖是一種虛擬的表或存儲查詢,它只包含一個或多個表的一部分,其內(nèi)容由查詢需求來定義。同真實表一樣,視圖也包含一系列帶有名稱的列(字段)和行(記錄)數(shù)據(jù)。這些數(shù)據(jù)來源于一個或多個基表的行或列的子集,也可以是基表的統(tǒng)計匯總,或者來源于另一個視圖或基表與視圖的組合。在視圖中最多可以定義一個或多個基表的1024個字段,能定義的記錄數(shù)只受表中被引用的記錄數(shù)限制。與表不同的是,視圖中的數(shù)據(jù)并不是物理存儲的數(shù)據(jù),視圖中的數(shù)據(jù)仍存儲在所引用的數(shù)據(jù)表中,視圖的結(jié)構(gòu)和數(shù)據(jù)是對數(shù)據(jù)表查詢的結(jié)果。82.視圖的作用相對于所引用的基表來說,視圖的作用類似于篩選。通過視圖進行查詢沒有任何限制,通過它們進行數(shù)據(jù)修改時的限制很少,因此,使用Transact-SQL語句可以通過引用視圖名稱來使用虛擬表。使用視圖可以實現(xiàn)以下功能:⑴返回用戶需要的數(shù)據(jù):視圖可以為用戶提供一個受限制的環(huán)境,因此,對用戶而言只能訪問表中允許的數(shù)據(jù),一些不需要、不合適的數(shù)據(jù)可以不在視圖上顯示,因此可以將用戶限定在特定的行或列上。此外,如果權(quán)限允許,用戶可以修改視圖中的全部或部分數(shù)據(jù)。9⑵使數(shù)據(jù)庫查詢方便、直觀:盡管原數(shù)據(jù)庫的設(shè)計可能很復(fù)雜,但是使用視圖可以避免用戶同復(fù)雜的數(shù)據(jù)結(jié)構(gòu)打交道,可以使用易于理解的名字來命名視圖,使數(shù)據(jù)庫結(jié)構(gòu)簡單、清晰。對于復(fù)雜的查詢,可以寫在視圖中,這樣,用戶就可以通過使用視圖來實現(xiàn)復(fù)雜的操作,避免重復(fù)寫一些復(fù)雜的查詢語句。⑶可以方便數(shù)據(jù)的導(dǎo)出:可以通過視圖來創(chuàng)建相對復(fù)雜的查詢,把一個表或多個表的數(shù)據(jù)導(dǎo)出到另一個應(yīng)用程序或外部文件中。⑷可以實現(xiàn)對創(chuàng)建視圖的內(nèi)部表進行數(shù)據(jù)修改:如插入新記錄、更新記錄以及刪除記錄等。107.1.2創(chuàng)建視圖的方法創(chuàng)建視圖首先應(yīng)該考慮的原則:⑴只能在當(dāng)前數(shù)據(jù)庫中創(chuàng)建視圖。⑵視圖名稱必須遵循標(biāo)識符的規(guī)則,且對每個用戶必須為唯一。視圖名不得與該用戶擁有的任何表的名稱相同。⑶不能將規(guī)則或DEFAULT定義與視圖相關(guān)聯(lián)。⑷不能將AFTER觸發(fā)器與視圖相關(guān)聯(lián),只有INSTEADOF觸發(fā)器可以與之相關(guān)聯(lián)。11⑸定義視圖的查詢不可以包含ORDERBY、COMPUTE或COMPUTEBY子句或INTO關(guān)鍵字。⑹不能在視圖上定義全文索引定義,不能創(chuàng)建臨時視圖,也不能在臨時表上創(chuàng)建視圖。創(chuàng)建視圖可以使用SQLServer2005提供的SQLServerManagementStudio管理控制臺(企業(yè)管理器),也可以在查詢分析器中使用Transact-SQL語言創(chuàng)建視圖。121.使用企業(yè)管理器創(chuàng)建視圖⑴啟動SQLServerManagementStudio管理控制臺,在“對象資源管理器”中展開指定的服務(wù)器和數(shù)據(jù)庫夾,選擇并打開要創(chuàng)建視圖的數(shù)據(jù)庫,如打開TSGL數(shù)據(jù)庫,用鼠標(biāo)右鍵單擊其中的“視圖”文件夾,從彈出的快捷菜單中選擇“新建視圖”選項,如圖7-1所示。13圖7-1在企業(yè)管理器中新建視圖14⑵單擊“新建視圖”命令,就會出現(xiàn)“添加表”對話框,如圖7-2所示;在“添加表”對話框內(nèi)有4個選擇頁(選項卡),分別是:“頁”、“視圖”、“函數(shù)”和“同義詞”。在“表”選擇頁內(nèi)列出了該數(shù)據(jù)庫已經(jīng)建立的所有表,可以根據(jù)需要從中選擇與新建視圖有關(guān)的表,并按【添加】按鈕,將相關(guān)表添加到右側(cè)的“視圖”窗口,如選擇TSGL數(shù)據(jù)庫的“讀者”表、“圖書”表和“借閱”表,如圖7-3所示。由圖可以看到,由于TSGL數(shù)據(jù)庫中的這3個表之間已經(jīng)建立了外鍵碼約束(關(guān)系圖),所以圖中的3個表之間的鍵碼與外鍵碼被自動連接起來。使用同樣的方法可以在“視圖”或“函數(shù)”選擇頁選擇需要的視圖或函數(shù),并依據(jù)選擇創(chuàng)建新視圖。15圖7-2新建視圖“添加表”對話框16圖7-3新建視圖的視圖窗口17⑶如果需要從“讀者”表中選擇借書證號、姓名、性別3個字段;從“圖書”表中選擇書名、作者、出版社3個字段;從“借閱”表中選擇借書日期1個字段;共7個字段構(gòu)成新視圖,那么可以單擊各個字段左邊的復(fù)選框來選擇這7個字段,如圖7-4所示。⑷從圖7-4可以看到,被選擇的字段列在視圖窗體中部的列表框里,在這個列表框中可以為所選字段設(shè)置別名;可以設(shè)置是否輸出;設(shè)置是否排序以及排序類型等;另外,在左邊的行標(biāo)處還可以采取拖動的方法調(diào)整各個字段的顯示順序。18圖7-4選擇新建視圖的字段19⑸新視圖所需要的字段選擇完成后,單擊工具欄中的“執(zhí)行SQL”按鈕或者右擊視圖窗體,從彈出的快捷菜單中選擇“執(zhí)行SQL”命令(見圖7-4),便可完成新視圖創(chuàng)建。這時,在視圖窗體內(nèi)的最下方顯示新建視圖的所有記錄,如圖7-5所示。在此,可以看到新建視圖顯示的是從圖書館借出圖書的讀者的借書證號、姓名、性別、所借圖書的書名、作者、出版社以及借書日期。這些數(shù)據(jù)來源于“讀者”表、“圖書”表和“借閱”表。⑹從圖7-4還可以看到,當(dāng)選擇視圖的相關(guān)表和字段后,在視圖窗體下方的列表框內(nèi)顯示了建立該視圖的SQL命令,反之,也可以在該列表框內(nèi)直接通過SQL命令建立視圖。20圖7-5新建視圖的視圖記錄21⑺新建視圖創(chuàng)建后,要保存該視圖,可以單擊工具欄上的“保存”按鈕,這時彈出“選擇名稱”對話框,在對話框的文本框內(nèi)輸入新建的視圖名,單擊【確定】按鈕即可完成視圖的創(chuàng)建,如圖7-6所示。圖7-6新建視圖的“選擇名稱”對話框222.使用Transact-SQL語言創(chuàng)建視圖使用Transact-SQL語言創(chuàng)建視圖的命令是:CREATEVIEW。其基本語法格式如下:CREATEVIEWview_name[(column[,...n])]ASselect_statement
主要參數(shù)說明如下:①view_name:是視圖的名稱。視圖名稱必須符合標(biāo)識符規(guī)則,可以選擇是否指定視圖所有者的名稱。23②column:是視圖中的列名。只有在下列情況下,才必須命名CREATEVIEW中的列:當(dāng)列是從算術(shù)表達式、函數(shù)或常量派生的,兩個或更多的列可能會具有相同的名稱(通常是因為連接),視圖中的某列被賦予了不同于派生來源列的名稱。還可以在SELECT語句中指派列名。如果未指定column,則視圖列將獲得與SELECT語句中的列相同的名稱。③n:是表示可以指定多列的占位符。④AS:是視圖要執(zhí)行的操作。⑤select_statement:是定義視圖的SELECT語句。該語句可以使用多個表或其它視圖。若要從創(chuàng)建視圖的SELECT子句所引用的對象中選擇,必須具有適當(dāng)?shù)臋?quán)限。24【例7.1】選擇TSGL數(shù)據(jù)庫中的“讀者”表的部分字段來創(chuàng)建一個視圖,限制年齡在20歲以上的記錄集合,視圖名稱定義為“View_duzhe”。程序代碼如下:USETSGLGOCREATEVIEWView_duzheASSELECT姓名,借書證號,性別,年齡FROM讀者WHERE年齡>=20在查詢分析器的“查詢腳本編輯器”中輸入并運行以上程序代碼,便可以創(chuàng)建視圖View_duzhe。257.1.3查看視圖1.使用企業(yè)管理器查看視圖⑴啟動SQLServerManagementStudio管理控制臺,在“對象資源管理器”中展開指定的服務(wù)器和數(shù)據(jù)庫,打開要查看視圖的數(shù)據(jù)庫,如打開TSGL數(shù)據(jù)庫,單擊“視圖”對象(文件夾),將出現(xiàn)“系統(tǒng)視圖”和已經(jīng)創(chuàng)建的視圖,從中選擇要查看的視圖,并用鼠標(biāo)右鍵單擊這個要查看的視圖(如:讀者借書情況視圖),從彈出的快捷菜單中,選擇“打開視圖”選項,如圖7-7所示。⑵選擇“打開視圖”命令后,在“對象資源管理器”右面的“摘要”窗口內(nèi)顯示該視圖所有記錄,如圖7-8所示。⑶如果要查看視圖的基本信息,包括視圖名稱、所有者、創(chuàng)建日期等,可以從彈出的快捷菜單中選擇“屬性”命令,打開“屬性”對話框。2627圖7-7使用企業(yè)管理器查看視圖28圖7-8使用企業(yè)管理器打開指定的視圖292.調(diào)用存儲過程查看視圖在查詢分析器中調(diào)用系統(tǒng)的存儲過程可以很方便地查看視圖的相關(guān)信息。SQLServer2005中用于查看視圖的相關(guān)信息的系統(tǒng)存儲過程有:⑴sp_help存儲過程:sp_help存儲過程可以顯示數(shù)據(jù)庫中視圖的特征信息。調(diào)用格式為:
sp_help
視圖名稱例如,調(diào)用sp_help存儲過程查看“讀者借閱情況視圖”,如圖7-9所示。30圖7-9調(diào)用sp_help存儲過程查看指定的視圖31⑵sp_helptext存儲過程:sp_helptext存儲過程顯示視圖在系統(tǒng)表中的定義。調(diào)用格式為:sp_helptext
視圖名稱⑶sp_depends存儲過程:sp_depends存儲過程可以顯示視圖創(chuàng)建時引用了哪些表。調(diào)用格式為:sp_depends
視圖名稱例如,調(diào)用sp_depends存儲過程查看“讀者借閱情況視圖”,如圖7-10所示。32圖7-10調(diào)用sp_depends存儲過程查看指定的視圖337.1.4修改、刪除及重命名視圖1.修改視圖修改視圖同樣可以使用SQLServer2005提供的SQLServerManagementStudio管理控制臺(企業(yè)管理器),也可以在查詢分析器中使用Transact-SQL語言修改視圖。⑴使用企業(yè)管理器修改視圖①啟動SQLServerManagementStudio管理控制臺,在“對象資源管理器”中展開指定的服務(wù)器和數(shù)據(jù)庫,打開要查看視圖的數(shù)據(jù)庫,如打開TSGL數(shù)據(jù)庫。②右擊需要修改的視圖,如修改“讀者借書情況視圖”對象,從彈出快捷菜單中選擇“修改”命令,如圖7-11所示。34圖7-11使用企業(yè)管理器修改指定的視圖35③單擊“修改”命令后,將在“摘要”窗口內(nèi)出現(xiàn)視圖的設(shè)計窗口,該窗口與創(chuàng)建視圖的窗口相同(參見圖7-5),可以按照創(chuàng)建視圖的方法修改視圖的有關(guān)屬性,即可以完成添加表、刪除表、添加引用字段、調(diào)整字段順序、刪除引用字段和過濾條件等對視圖屬性的修改。⑵使用Transact-SQL語言修改視圖使用Transact-SQL語言修改視圖的命令是:ALTERVIEW。其基本語法格式如下:36ALTERVIEWview_name[(column[,...n])]ASselect_statement
主要參數(shù)說明如下:①view_name:是要修改的視圖名稱。②column:是一列或多列的名稱,用逗號分開,將成為給定視圖的一部分。③n:是表示column可重復(fù)n次的占位符。④AS:是視圖要執(zhí)行的操作。⑤select_statement:是定義視圖的SELECT語句。37【例7.2】修改例7-1中創(chuàng)建的視圖View_duzhe,使其顯示所有年齡小于25歲的讀者記錄集合。程序代碼如下:USETSGLGOALTERVIEWView_duzheASSELECT*FROM讀者WHERE年齡<25GO在查詢分析器的“查詢腳本編輯器”中輸入并運行以上程序代碼,便可修改視圖View_duzhe。382.重命名視圖可以使用SQLServer2005提供的SQLServerManagementStudio管理控制臺(企業(yè)管理器)重新命名視圖,也可以在查詢分析器中調(diào)用系統(tǒng)的存儲過程重新命名視圖。⑴使用企業(yè)管理器對視圖重命名①啟動SQLServerManagementStudio管理控制臺,在“對象資源管理器”中展開指定的服務(wù)器和數(shù)據(jù)庫,打開要重新命名視圖的數(shù)據(jù)庫,如打開TSGL數(shù)據(jù)庫。②右擊需要重新命名的視圖,如對“讀者借書情況視圖”對象進行重新命名,從彈出的快捷菜單,從中選擇“重命名”命令(參見圖7-11),選擇“重命名”命令后,即可直接輸入新的視圖名稱。39⑵調(diào)用系統(tǒng)存儲過程對視圖重命名:在查詢分析器中調(diào)用系統(tǒng)的存儲過程可以很方便地重新命名視圖的名稱。SQLServer2005中用于對視圖重命名的系統(tǒng)存儲過程是:sp_rename。其基本語法格式如下:EXECsp_rename'object_name','new_name'主要參數(shù)說明如下:①object_name:視圖的當(dāng)前名稱。②new_name:是指定視圖的新名稱。new_name
必須是名稱的一部分,并且要遵循標(biāo)識符的規(guī)則。40⑶重命名視圖時,應(yīng)遵循以下原則:①要重命名的視圖必須位于當(dāng)前數(shù)據(jù)庫中。②新名稱必須遵守標(biāo)識符規(guī)則。③只能重命名自己擁有的視圖。④數(shù)據(jù)庫所有者可以更改任何用戶視圖的名稱。【例7.3】重新命名例7-1中所創(chuàng)建的視圖名稱,將原名稱View_duzhe重新命名為View_duzheshitu。程序代碼如下:EXECsp_rename'view_duzhe','view_duzheshitu'在查詢分析器的“查詢腳本編輯器”中輸入并運行以上程序代碼,便可修改視圖名為View_duzheshitu。413.刪除視圖刪除指定視圖可以使用SQLServer2005提供的SQLServerManagementStudio管理控制臺(企業(yè)管理器),也可以在查詢分析器中使用Transact-SQL語言刪除視圖。⑴使用企業(yè)管理器刪除視圖①啟動SQLServerManagementStudio管理控制臺,在“對象資源管理器”中展開指定的服務(wù)器和數(shù)據(jù)庫,打開要刪除視圖的數(shù)據(jù)庫,如打開TSGL數(shù)據(jù)庫②右擊“視圖”從彈出的快捷菜單中選擇“刪除”命令,則會出現(xiàn)“刪除對象”對話框,在該對話框中單擊【顯示依賴關(guān)系】按鈕,將出現(xiàn)“依賴關(guān)系”對話框,在對話框內(nèi)顯示和該視圖相關(guān)的依賴信息,單擊【確定】按鈕,即可刪除該視圖,如圖7-12所示。42圖7-12刪除視圖的依賴關(guān)系對話框43⑵在查詢分析器中使用Transact-SQL語言刪除視圖:使用Transact-SQL語言刪除視圖的命令是:DROPVIEW。其基本語法格式如下:DROPVIEW{view}[,...n]主要參數(shù)說明如下:①view:是要刪除的視圖名稱,視圖名稱必須符合標(biāo)識符規(guī)則。②n:是表示可以指定多個視圖的占位符?!纠?.4】刪除例7-3中創(chuàng)建的視圖view_duzheshitu。程序代碼如下:
DROPVIEWview_duzheshitu在查詢分析器的“查詢腳本編輯器”中輸入并運行以上程序代碼,將刪除指定的視圖view_duzheshitu。44457.1.5使用視圖操作表數(shù)據(jù)在SQLServer中,不但可以通過視圖方便地檢索數(shù)據(jù),而且還可以通過視圖對基表中的數(shù)據(jù)進行操作,包括添加、修改和刪除數(shù)據(jù)等。使用SQLServer2005提供的SQLServerManagementStudio管理控制臺(企業(yè)管理器)通過視圖對表進行添加、修改和刪除數(shù)據(jù)的操作同對數(shù)據(jù)庫中的基表操作一樣。所以,在此僅介紹使用Transact-SQL語句通過視圖對表數(shù)據(jù)進行操作。1.使用視圖查詢數(shù)據(jù)由于可以把視圖看作是一個虛擬的表,因此視圖也可以像表一樣,用在查詢語句的FROM子句中作為數(shù)據(jù)源?!纠?.5】在TSGL數(shù)據(jù)庫中的“讀者借書情況視圖”里查詢性別為“男”的所有讀者記錄。程序代碼如下:USETSGLGOSELECT*FROMView_duzhe
WHERE性別='男'GO在查詢分析器的“查詢腳本編輯器”中輸入并運行以上程序代碼,程序的運行結(jié)果如圖7-13所示,顯示出所有男讀者的借書情況。4647圖7-13使用視圖檢索數(shù)據(jù)482.通過視圖添加表數(shù)據(jù)可以使用Transact-SQL語言的INSERT語句向視圖中添加表數(shù)據(jù),但是所添加數(shù)據(jù)實際上將存儲在視圖所參照的表中。由于視圖的特性,通過視圖向數(shù)據(jù)表中添加數(shù)據(jù),應(yīng)滿足以下條件:⑴應(yīng)具有向數(shù)據(jù)表插入數(shù)據(jù)的權(quán)限,否則不能插入數(shù)據(jù)。⑵視圖中不能含多個字段的組合,或者包含了使用統(tǒng)計函數(shù)的結(jié)果。49⑶由于一般情形下,視圖只引用了表中的部分字段,所以通過視圖插入數(shù)據(jù)時只能指定視圖中引用的字段,而對于那些未引用的字段,必須知道在沒有指定取值的情況下如何填充數(shù)據(jù),因此視圖中未引用的字段要么允許空值,要么在該字段設(shè)有默認值,或者該字段是標(biāo)識字段,或者該字段的數(shù)據(jù)類型為timestamp或uniqueidentifier。⑷視圖中不能包含DISTINCT子句或者GROUPBY子句。50【例7.6】首先創(chuàng)建一個基于“讀者”表的新視圖“讀者表視圖”,然后向“讀者表視圖”中添加一條新的數(shù)據(jù)記錄,再用SELECT語句檢索這條記錄是否添加到“讀者”表中。程序代碼如下:USETSGLGOCREATEVIEW讀者表視圖(借書證號,姓名,性別,年齡)ASSELECT借書證號,姓名,性別,年齡FROM讀者GOINSERTINTO讀者表視圖(借書證號,姓名,性別,年齡)VALUES('110','張林','男',20)GOSELECT*FROM讀者WHERE性別='男'在查詢分析器的“查詢腳本編輯器”中輸入并運行以上程序代碼,將在TSGL數(shù)據(jù)庫中創(chuàng)建“讀者表視圖”,并通過該視圖將記錄“張林”添加到“讀者”表中,如圖7-14所示。51圖7-14通過視圖添加表數(shù)據(jù)523.通過視圖修改表數(shù)據(jù)除了使用INSERT語句插入數(shù)據(jù)外,還可以使用UPDATE語句通過視圖對表的數(shù)據(jù)進行更新,在此適用于INSERT操作的多個限制,同樣也適用于UPDATE操作。53【例7.7】使用UPDATE修改上例中的記錄,將張林的姓名修改為張?zhí)禅?,并查詢修改結(jié)果。程序代碼如下:USETSGLGOUPDATE讀者表視圖SET姓名='張?zhí)禅?WHERE姓名='張林'GOSELECT*FROM讀者GO在查詢分析器的“查詢腳本編輯器”中輸入并運行以上程序代碼,將通過視圖將“讀者”表中的張林修改為張?zhí)禅櫍鐖D7-15所示。54圖7-15通過視圖更新輸出結(jié)果554.通過視圖刪除表數(shù)據(jù)使用DELETE語句可以通過視圖將數(shù)據(jù)表中的數(shù)據(jù)刪除,但是,如果視圖應(yīng)用了兩個或兩個以上的數(shù)據(jù)表,則不允許刪除視圖中的數(shù)據(jù)。此外,使用視圖刪除表記錄也不能違背定義視圖時WHERE子句的條件限制。56【例7.8】使用DELETE刪除上例中姓名為張?zhí)禅櫟挠涗?,并查詢結(jié)果。程序代碼如下:USETSGLGODELETEFROM讀者表視圖WHERE姓名='張?zhí)禅?SELECT*FROM讀者GO在查詢分析器的“查詢腳本編輯器”中輸入并運行以上程序代碼,將通過視圖刪除“讀者”表中的張?zhí)禅櫽涗洠鐖D7-16所示。57圖7-16通過視圖刪除表記錄587.2創(chuàng)建和管理存儲過程
SQLServer提供了一種可以將一些固定的操作集中由SQLServer數(shù)據(jù)庫服務(wù)器來完成,以實現(xiàn)某個特定的任務(wù),這種方法就是存儲過程。存儲過程是一段在服務(wù)器上執(zhí)行的程序,它在服務(wù)器端對數(shù)據(jù)庫記錄進行處理,再把結(jié)果返回到客戶端,通過存儲過程一方面可以充分利用服務(wù)器端的速度和計算能力,另一方面避免把大量的數(shù)據(jù)從服務(wù)器端下載到客戶端,從而減少網(wǎng)絡(luò)的數(shù)據(jù)流量,服務(wù)器端只需返回計算結(jié)果給客戶端。因此,對于客戶端來說,可以不必關(guān)心后臺數(shù)據(jù)結(jié)構(gòu)的變化。597.2.1存儲過程的概念1.存儲過程存儲過程是存儲在服務(wù)器端的一組SQL語句和可選控制流語句的預(yù)編譯集合,以一個名稱存儲并作為一個單元處理。存儲過程存儲在數(shù)據(jù)庫內(nèi),可由應(yīng)用程序通過一個調(diào)用執(zhí)行指定的存儲過程,而且允許用戶聲明變量、有條件地執(zhí)行以及其它強大的編程功能。存儲過程可包含程序流、邏輯以及對數(shù)據(jù)庫的查詢。它們可以接受參數(shù)、輸出參數(shù)、返回單個或多個結(jié)果集以及返回值??梢猿鲇谌魏问褂肧QL語句的目的來使用存儲過程。60使用存儲過程主要有以下優(yōu)點:⑴模塊化程序設(shè)計:存儲過程可以封裝一些功能性模塊,并將其存儲在數(shù)據(jù)庫中,程序中需要時可以多次調(diào)用,提高了程序設(shè)計的模塊化程度。⑵提高了執(zhí)行速度:存儲過程執(zhí)行一次后,其執(zhí)行規(guī)劃就被自動保存到高速緩存中,再次調(diào)用該存儲過程時,就可以從高速緩存中調(diào)用該存儲過程編譯過的二進制代碼來執(zhí)行。這不同于Transact-SQL語句,Transact-SQL語句每次運行時都要從客戶端重復(fù)輸入,并由SQLServer進行編譯和優(yōu)化。顯然存儲過程的執(zhí)行速度要快于Transact-SQL程序代碼的執(zhí)行速度。⑶減少網(wǎng)絡(luò)流量:一個需要數(shù)百行Transact-SQL代碼的操作執(zhí)行,由一條存儲過程的執(zhí)行代碼的單獨語句就可以實現(xiàn),顯然減少了網(wǎng)絡(luò)的傳輸流量。612.存儲過程的分類存儲過程可以分為兩類:即系統(tǒng)存儲過程和用戶自定義的存儲過程。SQLServer提供了大量的系統(tǒng)存儲過程,用于管理SQLServer并顯示有關(guān)數(shù)據(jù)庫和用戶的信息。系統(tǒng)存儲過程主要存儲在master數(shù)據(jù)庫中并以sp_為前綴,它主要是從系統(tǒng)表中獲得信息,盡管這些系統(tǒng)存儲過程放在master庫中,但是仍然可以在其他數(shù)據(jù)庫中調(diào)用,調(diào)用前不必在存儲過程名前加上數(shù)據(jù)庫名,當(dāng)創(chuàng)建一個新數(shù)據(jù)庫時,一些系統(tǒng)的存儲過程會被自動在該數(shù)據(jù)庫的子文件夾中建立。用戶自定義的存儲過程則是由用戶創(chuàng)建并能完成某一特定功能的存儲過程。627.2.2創(chuàng)建存儲過程1.使用企業(yè)管理器創(chuàng)建存儲過程⑴啟動SQLServerManagementStudio管理控制臺,在“對象資源管理器”中展開指定的服務(wù)器和數(shù)據(jù)庫,選擇并打開要創(chuàng)建存儲過程的數(shù)據(jù)庫,如打開TSGL數(shù)據(jù)庫,從打開的數(shù)據(jù)庫目錄中選擇并展開“可編程性”文件夾,從展開的子目錄中右擊“存儲過程”,將彈出快捷菜單,從彈出的快捷菜單中選擇“新建存儲過程”命令,如圖7-17所示。⑵單擊“新建存儲過程”選項,在“摘要”窗口內(nèi)出現(xiàn)編輯存儲過程的文本框,在這個文本框內(nèi)便可以輸入創(chuàng)建存儲過程的Transact-SQL語句,如圖7-18所示。63圖7-17使用企業(yè)管理器創(chuàng)建存儲過程64圖7-18創(chuàng)建存儲過程的文本框65⑶從圖7-18可以看到在創(chuàng)建存儲過程的文本框內(nèi)已經(jīng)給出了創(chuàng)建存儲過程的程序框架,可在框架內(nèi)填入相關(guān)的Transact-SQL語句。例如,在TSGL數(shù)據(jù)庫中,創(chuàng)建一個存儲過程其名為“讀者存儲過程”,該存儲過程的功能是查詢年齡不小于22歲的記錄,查詢結(jié)果要按年齡的大小進行降序排列。那么可以在CREATEPROCEDURE后填入過程名:“讀者存儲過程”,存儲過程的Transact-SQL語句定義在起始語句BEGIN和終止語句END之間,如圖7-19所示。⑷存儲過程語句編輯完成后單擊工具欄中的執(zhí)行按鈕,完成存儲過程的創(chuàng)建。66圖7-19創(chuàng)建存儲過程的程序框架672.使用Transact-SQL語言創(chuàng)建存儲過程使用Transact-SQL語言創(chuàng)建存儲過程的命令是:CREATEPROCEDURE。其基本語法格式如下:CREATEPROCEDUREprocedure_name
ASsql_statement[...n]主要參數(shù)說明如下:①procedure_name:新建存儲過程的名稱。過程名必須符合標(biāo)識符規(guī)則,且必須對于數(shù)據(jù)庫及其所有者唯一。②AS:指定過程要執(zhí)行的操作。③sql_statement:過程中要包含的任意數(shù)目和類型的Transact-SQL語句,存儲過程內(nèi)可以調(diào)用另一個存儲過程,但嵌套最多不超過16層。68④n:表示此過程可以包含多條Transact-SQL語句的占位符。存儲過程的定義實際包含3個主要組成部分:過程名稱、參數(shù)的說明,以及過程的主體(其中包含執(zhí)行過程操作的Transact-SQL語句)。創(chuàng)建存儲過程時應(yīng)注意以下幾點:⑴不能將CREATEPROCEDURE語句與其它SQL語句組合到單個批處理中。⑵創(chuàng)建存儲過程的權(quán)限默認屬于數(shù)據(jù)庫所有者,該所有者可將此權(quán)限授予其他用戶。⑶存儲過程是數(shù)據(jù)庫對象,其名稱必須遵守標(biāo)識符規(guī)則。⑷只能在當(dāng)前數(shù)據(jù)庫中創(chuàng)建存儲過程。69【例7.9】在TSGL數(shù)據(jù)庫中,為“讀者”表創(chuàng)建一個名為“讀者存儲過程2”的存儲過程,用于查詢年齡不小于22歲的記錄,并將查詢結(jié)果按年齡的大小進行升排列。程序代碼如下:USETSGLGOCREATEPROCEDURE讀者存儲過程2ASSELECT*FROM讀者
WHERE年齡>=22ORDERBY年齡ASCGOEXEC讀者存儲過程2在查詢分析器的“查詢腳本編輯器”中輸入并運行該程序,將在“結(jié)果”窗口顯示查詢結(jié)果,如圖7-20所示。70圖7-20使用查詢分析器創(chuàng)建存儲過程71【例7.10】上例創(chuàng)建了一個存儲過程“讀者存儲過程2”,用于返回年齡不小于22歲的記錄,并按升序排列。本例在TSGL數(shù)據(jù)庫中,先新建一個表,表名為“讀者新表”,把上例返回的結(jié)果集存入新表中。程序代碼見教材P134在查詢分析器的“查詢腳本編輯器”中輸入并運行該程序,在TSGL數(shù)據(jù)庫中將建立“讀者新表”該表的記錄是調(diào)用“讀者存儲過程2”的結(jié)果,如圖7-21所示。72圖7-21將存儲過程的執(zhí)行結(jié)果插入讀者新表737.2.3查看、修改和刪除存儲過程1.查看存儲過程可以使用SQLServer2005提供的SQLServerManagementStudio管理控制臺(企業(yè)管理器)查看所創(chuàng)建的存儲過程,也可以在查詢分析器中調(diào)用系統(tǒng)存儲過程查看所創(chuàng)建的存儲過程。⑴使用企業(yè)管理器查看存儲過程:①啟動SQLServerManagementStudio管理控制臺,在“對象資源管理器”中展開指定的服務(wù)器和數(shù)據(jù)庫,選擇并打開要查看存儲過程的數(shù)據(jù)庫,如打開TSGL數(shù)據(jù)庫。74②從打開的數(shù)據(jù)庫目錄中選擇并展開“可編程性”文件夾,再從展開的子目錄中單擊“存儲過程”,將展開“存儲過程”顯示“系統(tǒng)存儲過程”和用戶創(chuàng)建的存儲過程,從中選擇要查看的用戶存儲過程,如要查看“讀者存儲過程”,右擊該存儲過程名,將彈出快捷菜單,從彈出的快捷菜單中選擇“屬性”命令,如圖7-22所示。75圖7-22在企業(yè)管理器中查看存儲過程③單擊“屬性”選項,將出現(xiàn)“存儲過程屬性”對話框,如圖7-23所示,該對話框中有“常規(guī)”、“權(quán)限”和“擴展屬性”3個選擇頁,通過這些選擇頁可以查看指定存儲過程的相關(guān)屬性。④從彈出的快捷菜單中若選擇“查看依賴關(guān)系”命令,會彈出“對象依賴關(guān)系”對話框,該對話框?qū)@示所查看的存儲過程的對象和該存儲過程依賴的其它數(shù)據(jù)庫對象的名稱。7677圖7-23存儲過程的屬性對話框78⑵在查詢分析器的“查詢腳本編輯器”中調(diào)用系統(tǒng)存儲過程可以查看指定的存儲過程:查看用戶存儲過程的系統(tǒng)存儲過程是:sp_help和sp_helptext。①系統(tǒng)存儲過程:sp_help其基本語法格式:sp_help
procedure_name
主要參數(shù)說明如下:procedure_name
:為存儲過程名稱。調(diào)用系統(tǒng)存儲過程sp_help可以查看指定存儲過程的相關(guān)信息,如:存儲過程名、存儲過程的所有者、存儲過程的類型、創(chuàng)建時間等,如圖7-24所示。79圖7-24調(diào)用系統(tǒng)存儲過程sp_help查看用戶定義的存儲過程80②系統(tǒng)存儲過程:sp_helptext。其基本語法格式:sp_helptext
procedure_name主要參數(shù)說明如下:procedure_name:為存儲過程名稱。調(diào)用系統(tǒng)存儲過程sp_helptext
將顯示指定存儲過程的定義信息,查看用于創(chuàng)建存儲過程的SQL語句,如圖7-25所示。81圖7-25調(diào)用系統(tǒng)存儲過程sp_helptext查看用戶定義的存儲過程822.修改存儲過程可以使用SQLServer2005提供的SQLServerManagementStudio管理控制臺(企業(yè)管理器)修改存儲過程,也可以在查詢分析器中使用Transact-SQL語言修改存儲過程。⑴使用企業(yè)管理器修改存儲過程:①啟動SQLServerManagementStudio管理控制臺,在“對象資源管理器”中展開指定的服務(wù)器和數(shù)據(jù)庫,選擇并打開要修改存儲過程的數(shù)據(jù)庫,如打開TSGL數(shù)據(jù)庫。83②從打開的數(shù)據(jù)庫目錄中選擇并展開“可編程性”文件夾,再從展開的子目錄中單擊“存儲過程”,將展開“存儲過程”并顯示“系統(tǒng)存儲過程”和用戶創(chuàng)建的存儲過程,從中選擇要修改的用戶存儲過程,如要修改“讀者存儲過程”,右擊該存儲過程名,從彈出的快捷菜單中選擇“修改”命令,參見圖7-22。③單擊“修改”命令,將在“摘要”窗口內(nèi)顯示要修改的存儲過程的SQL程序,可直接修改這個存儲過程,參見圖7-26。④存儲過程修改后,可單擊工具欄中的“對勾”按鈕,檢查是否有語法錯誤,若有語法錯誤會在下面的窗口內(nèi)顯示錯誤類型,提示進行修改;無語法錯誤,則提示“命令成功執(zhí)行”。⑤存儲過程編輯無誤后,單擊工具欄中的“執(zhí)行”按鈕執(zhí)行修改后的存儲過程,以檢查運行結(jié)果是否正確,最后可單擊【保存】按鈕保存修改后的存儲過程。8485圖7-26使用企業(yè)管理器修改用戶定義的存儲過程86⑵使用Transact-SQL語言修改存儲過程:使用Transact-SQL語言修改存儲過程的命令是:ALTERPROCEDURE。其基本語法格式如下:ALTERPROCEDUREprocedure_name
ASsql_statement[...n]主要參數(shù)說明如下:①procedure_name:是要修改的過程名稱。②AS:過程將要執(zhí)行的操作。③sql_statement:過程中要包含的任意數(shù)目和類型的Transact-SQL語句。④n:是表示該過程中可以包含多條Transact-SQL語句的占位符。ALTERPROCEDURE命令可以修改由CREATEPROCEDURE語句所創(chuàng)建的存儲過程。87883.重命名和刪除存儲過程重新命名存儲過程可以使用SQLServer2005提供的SQLServerManagementStudio管理控制臺(企業(yè)管理器),也可以在查詢分析器中調(diào)用系統(tǒng)的存儲過程重新命名存儲過程。⑴使用企業(yè)管理器重新命名存儲過程:啟動SQLServerManagementStudio管理控制臺,在“對象資源管理器”中展開指定的服務(wù)器和數(shù)據(jù)庫,選擇并打開要重新命名存儲過程的數(shù)據(jù)庫,如打開TSGL數(shù)據(jù)庫,從打開的數(shù)據(jù)庫目錄中選擇并展開“可編程性”文件夾,從展開的子目錄中單擊“存儲過程”,將展開“存儲過程”顯示“系統(tǒng)存儲過程”和用戶創(chuàng)建的存儲過程,從中選擇要重新命名的用戶存儲過程,如重新命名“讀者存儲過程”,右擊該存儲過程名,將彈出快捷菜單,從彈出的快捷菜單中選擇“重命名”命令,參見圖7-22。單擊“重命名”命令后,即可在原存儲過程名的位置上重新命名該存儲過程名。89⑵在查詢分析器的“查詢腳本編輯器”中調(diào)用系統(tǒng)存儲過程可重新命名存儲過程:可以重新命名存儲過程的系統(tǒng)存儲過程是:sp_rename。其基本語法格式如下:sp_rename'object_name','new_name'主要參數(shù)說明如下:①'object_name':存儲過程的當(dāng)前名稱。②'new_name':是指定存儲過程的新名稱。new_name必須是名稱的一部分,并且要遵循標(biāo)識符的規(guī)則。90【例7.11】在TSGL數(shù)據(jù)庫中把“讀者”表中的存儲過程“讀者存儲過程”改名為“讀者存儲過程重命名”程序代碼如下:EXECsp_rename'讀者存儲過程','讀者存儲過程重命名'在查詢分析器的“查詢腳本編輯器”中輸入并運行以上程序代碼,將重新命名“讀者存儲過程”為“讀者存儲過程重命名”。91⑶刪除存儲過程:在企業(yè)管理器中可以很容易地刪除指定的存儲過程。其操作為:啟動SQLServerManagementStudio管理控制臺,在“對象資源管理器”中展開指定的服務(wù)器和數(shù)據(jù)庫,選擇并打開要刪除存儲過程的數(shù)據(jù)庫,如打開TSGL數(shù)據(jù)庫,從打開的數(shù)據(jù)庫目錄中選擇并展開“可編程性”文件夾,再從展開的子目錄中單擊“存儲過程”,將展開“存儲過程”并顯示“系統(tǒng)存儲過程”和用戶創(chuàng)建的存儲過程,從中選擇要刪除的用戶存儲過程,如要刪除“讀者存儲過程”,可右擊該存儲過程名,從彈出的快捷菜單中選擇并單擊“刪除”命令,即可將指定的存儲過程刪除,可參見圖7-22。927.3創(chuàng)建和管理觸發(fā)器觸發(fā)器是一類特殊的存儲過程,但它不等同于存儲過程,主要區(qū)別在于觸發(fā)器主要是通過事件進行觸發(fā)而被執(zhí)行的,而存儲過程則是通過調(diào)用存儲過程的名稱而被執(zhí)行的,因此,當(dāng)事件發(fā)生時觸發(fā)器由SQLServer自動執(zhí)行,而不能由應(yīng)用程序調(diào)用。觸發(fā)器被定義為在對表或視圖執(zhí)行UPDATE、INSERT或DELETE語句時自動執(zhí)行。937.3.1觸發(fā)器的作用和類型1.觸發(fā)器的作用觸發(fā)器有以下作用:⑴觸發(fā)器可通過數(shù)據(jù)庫中的相關(guān)表實現(xiàn)級聯(lián)更改;不過,通過級聯(lián)引用完整性約束可以更有效地執(zhí)行這些更改。⑵觸發(fā)器可以強制比用CHECK約束定義的約束更為復(fù)雜的約束。與CHECK約束不同,觸發(fā)器可以引用其它表中的列。⑶一個表中的多個同類觸發(fā)器(INSERT、UPDATE或DELETE)允許采取多個不同的對策以響應(yīng)同一個修改語句。
94⑷觸發(fā)器是自動執(zhí)行的,它們在對表的數(shù)據(jù)做任何修改時(如,手工輸入或者應(yīng)用程序采取的操作),將被立即激活。⑸觸發(fā)器可以通過數(shù)據(jù)庫中的相關(guān)表進行層疊更改。這比直接把代碼寫在前臺的做法更安全。例如,可以在titles表的title_id列上寫入一個刪除觸發(fā)器,以使其它表中的各匹配行采取刪除操作。該觸發(fā)器用title_id列作為唯一鍵,在titleauthor、sales及roysched表中對各匹配行進行定位。⑹觸發(fā)器可以強制限制,這些限制比用CHECK約束所定義的更復(fù)雜。與CHECK約束不同的是,觸發(fā)器可以引用其它表中的列。952.觸發(fā)器的類型觸發(fā)器可以分為AFTER觸發(fā)器和INSTEADOF觸發(fā)器兩類。⑴AFTER觸發(fā)器:這種類型的觸發(fā)器將在數(shù)據(jù)變動(INSERT、UPDATE和DELETE操作)完成以后才被觸發(fā)??梢詫ψ儎拥臄?shù)據(jù)進行檢查,如果發(fā)現(xiàn)錯誤,將拒絕接受或回滾變動的數(shù)據(jù)。AFTER觸發(fā)器只能在表中定義,在同一個數(shù)據(jù)表中可以創(chuàng)建多個AFTER觸發(fā)器。96⑵INSTEADOF觸發(fā)器:這種類型觸發(fā)器將在數(shù)據(jù)變動以前被觸發(fā),并取代變動數(shù)據(jù)的操作(INSERT、UPDATE和DELETE操作),而去執(zhí)行觸發(fā)器定義的操作。INSTEADOF觸發(fā)器可以在表或視圖中定義。每個INSERT、UPDATE和DELETE語句最多可以定義一個INSTEADOF觸發(fā)器。INSTEADOF觸發(fā)器可以通過使用邏輯語句以執(zhí)行批處理的某一部分而放棄執(zhí)行其余部分。注意:在SQLServer中默認觸發(fā)器是AFTER觸發(fā)器。977.3.2創(chuàng)建觸發(fā)器1.使用企業(yè)管理器創(chuàng)建觸發(fā)器⑴啟動SQLServerManagementStudio管理控制臺,在“對象資源管理器”中展開指定的服務(wù)器和數(shù)據(jù)庫,選擇并打開要創(chuàng)建觸發(fā)器的數(shù)據(jù)庫,如打開TSGL數(shù)據(jù)庫,從打開的數(shù)據(jù)庫目錄中選擇“表”文件夾,單擊“表”文件夾,將展示“系統(tǒng)表”和用戶定義的所有表,從中選擇要創(chuàng)建觸發(fā)器的用戶表。如為“讀者”表創(chuàng)建觸發(fā)器,則單擊該表左端的按鈕將展開該表,從其子目錄中選擇并右擊“觸發(fā)器”,再從彈出的快捷菜單中選擇“新建觸發(fā)器”命令,如圖7-27所示。98圖7-27使用企業(yè)管理器創(chuàng)建觸發(fā)器99⑵單擊“新建觸發(fā)器”命令后,在右面窗口內(nèi)出現(xiàn)“觸發(fā)器編輯”窗口,其內(nèi)顯示觸發(fā)器程序編輯框架,可以輸入要編輯的觸發(fā)器語句,如圖7-28所示。⑶在“觸發(fā)器編輯”窗口內(nèi)創(chuàng)建一個觸發(fā)器時必須指定以下幾項內(nèi)容:① 觸發(fā)器的名稱;② 在其上定義觸發(fā)器的表;③ 觸發(fā)器將何時觸發(fā);④ 執(zhí)行觸發(fā)操作的SQL編程語句。100圖7-28企業(yè)管理器的觸發(fā)器編輯窗口101⑷在“觸發(fā)器編輯”窗口內(nèi)創(chuàng)建觸發(fā)器的默認文本框架:
CREATETRIGGER<TriggerName>ONdbo.webusersFOR|AFTERINSERT,UPDATE,DELETEASBEGIN
::
ENDGO該程序框架實際是創(chuàng)建觸發(fā)器的程序框架。該程序創(chuàng)建了一個由INSERT、UPDATE和DELETE觸發(fā)器。如果要為各個動作創(chuàng)建不同的觸發(fā)器,或者創(chuàng)建一個只由一個動作觸發(fā)的觸發(fā)器,只需要這個默認的語句,簡單地刪除不需要的動作。在關(guān)鍵字AS的下面BEGIN……END之間可以輸入觸發(fā)器所需要使用的SQL語句。102⑸觸發(fā)器的SQL語句編輯完成后,可單擊工具欄上的“對勾”按鈕檢查所設(shè)計的觸發(fā)器語句有無語法錯誤,若有錯誤,系統(tǒng)將在“消息”窗口給出相應(yīng)提示,如無錯誤則提示“命令已成功完成”,可以執(zhí)行所創(chuàng)建的觸發(fā)器。⑹單擊工具欄的“執(zhí)行”按鈕,將成功地創(chuàng)建一個新的觸發(fā)器。1032.使用Transact-SQL語言創(chuàng)建觸發(fā)器使用Transact-SQL語言創(chuàng)建觸發(fā)器的命令是:CREATETRIGGER。其基本語法格式如下:CREATETRIGGERtrigger_name
ON{table|view}{FOR|AFTER|INSTEADOF}{[INSERT][,][UPDATE]}ASsql_statement[...n]主要參數(shù)說明如下:①trigger_name:是觸發(fā)器的名稱。觸發(fā)器名稱必須符合標(biāo)識符規(guī)則,并且在數(shù)據(jù)庫中唯一,可以選擇是否指定觸發(fā)器所有者名稱。104②table|view:是在其上執(zhí)行觸發(fā)器的表或視圖,有時稱為觸發(fā)器表或觸發(fā)器視圖。可以選擇是否指定表或視圖的所有者名稱。③AFTER:指定觸發(fā)器只有在觸發(fā)SQL語句中指定的所有操作都已成功執(zhí)行后才被激發(fā)。所有的引用級聯(lián)操作和約束檢查也必須成功完成后,才能執(zhí)行此觸發(fā)器。如果僅指定FOR關(guān)鍵字,則AFTER是默認設(shè)置。不能在視圖上定義AFTER觸發(fā)器。④INSTEADOF:指定執(zhí)行觸發(fā)器而不是執(zhí)行觸發(fā)SQL語句,從而替代觸發(fā)語句的操作。在表或視圖上,每個INSERT、UPDATE或DELETE語句最多可以定義一個INSTEADOF觸發(fā)器。然而,可以在每個具有INSTEADOF觸發(fā)器的視圖上定義視圖。105⑤{[DELETE][,][INSERT][,][UPDATE]}:是指定在表或視圖上執(zhí)行哪些數(shù)據(jù)修改語句時將激活觸發(fā)器的關(guān)鍵字,必須至少指定一個選項。在觸發(fā)器定義中允許使用以任意順序組合的這些關(guān)鍵字。如果指定的選項多于一個,需用逗號分隔這些選項。對于INSTEADOF觸發(fā)器,不允許在具有ONDELETE級聯(lián)操作引用關(guān)系的表上使用DELETE選項。同樣,也不允許在具有ONUPDATE級聯(lián)操作引用關(guān)系的表上使用UPDATE選項。⑥AS:是觸發(fā)器要執(zhí)行的操作。⑦sql_statement:是觸發(fā)器的條件和操作。觸發(fā)器條件指定其它準則,以確定DELETE、INSERT或UPDATE語句是否導(dǎo)致執(zhí)行觸發(fā)器操作。當(dāng)嘗試DELETE、INSERT或UPDATE操作時,Transact-SQL語句中指定的觸發(fā)器操作將生效。106【例7.12】在TSGL數(shù)據(jù)庫中,為“讀者”表創(chuàng)建兩個觸發(fā)器,用于通知新讀者的加入和老讀者的退出,即在插入新記錄和刪除記錄后均發(fā)出提示。程序代碼見教材P141在查詢分析器的“查詢腳本編輯器”中輸入并運行以上程序,將創(chuàng)建2個觸發(fā)器,并在插入一條記錄和刪除一條記錄時分別執(zhí)行這2個觸發(fā)器,運行結(jié)果如圖7-29所示。107圖7-29在查詢分析器中創(chuàng)建觸發(fā)器108【例7.13】在TSGL數(shù)據(jù)庫中,為“讀者”表創(chuàng)建一個插入、更新類型的觸發(fā)器,即當(dāng)讀者表發(fā)生變化時,發(fā)送一封郵件到用戶“x.l.meng”,發(fā)送郵件可調(diào)用系統(tǒng)存儲過程xp_sendmail。程序代碼如下:USETSGLIFEXISTS(SELECTnameFROMsysobjectswherename='讀者觸發(fā)器'ANDtype='TR')DROPTRIGGER讀者觸發(fā)器GOCREATETRIGGER讀者觸發(fā)器ON讀者FORINSERT,UPDATEASEXECmaster..xp_sendmail'x.l.meng','數(shù)據(jù)庫已經(jīng)更改,請注意'在查詢分析器的“查詢腳本編輯器”中輸入并運行以上程序代碼,運行結(jié)果如圖7-30所示。109圖7-30例7.13觸發(fā)器的運行結(jié)果1107.3.3查看、修改和刪除觸發(fā)器1.查看觸發(fā)器查看觸發(fā)器可以使用SQLServer2005提供的SQLServerManagementStudio管理控制臺(企業(yè)管理器),也可以在查詢分析器中調(diào)用系統(tǒng)存儲過程查看觸發(fā)器。⑴使用企業(yè)管理器查看觸發(fā)器:①啟動SQLServerManagementStudio管理控制臺,在“對象資源管理器”中展開指定的服務(wù)器和數(shù)據(jù)庫,選擇并打開要查看觸發(fā)器的數(shù)據(jù)庫,如打開TSGL數(shù)據(jù)庫。111②從打開的數(shù)據(jù)庫目錄中選擇“表”文件夾,單擊“表”文件夾,將展示“系統(tǒng)表”和用戶定義的所有表,從中選擇要查看觸發(fā)器的用戶表。如查看“讀者”表所創(chuàng)建的觸發(fā)器,單擊該表名左端的三角按鈕展開該表,從其子目錄中選擇并單擊“觸發(fā)器”左端的三角按鈕,將打開“觸發(fā)器”子目錄,展示為該表(“讀者”表)所創(chuàng)建的觸發(fā)器,如圖7-31所示。③從展示的觸發(fā)器目錄中選擇要查看的觸發(fā)器,如要查看“讀者觸發(fā)器_老讀者退出”觸發(fā)器,則右擊該觸發(fā)器,再從彈出的快捷菜單中選擇“查看依賴關(guān)系”命令,如圖7-31所示。④單擊“查看依賴關(guān)系”命令,將出現(xiàn)“對象依賴關(guān)系”對話框,在該對話框內(nèi)顯示依賴該觸發(fā)器的對象和該觸發(fā)器依賴的其它數(shù)據(jù)庫對象的名稱等屬性,如圖7-32所示。112圖7-31在企業(yè)管理器中查看觸發(fā)器113圖7-32查看觸發(fā)器的依賴關(guān)系114⑵在查詢分析器中調(diào)用系統(tǒng)的存儲過程查看觸發(fā)器:查看觸發(fā)器的系統(tǒng)存儲過程主要有:sp_helptrigger、sp_help、sp_helptext、sp_depends等,它們可以顯示指定觸發(fā)器的不同信息。①sp_helptrigger:用于查看指定表的觸發(fā)器類型。其基本語法格式:sp_helptrigger'表名'②sp_help:用于查看觸發(fā)器的一般信息,如觸發(fā)器的名稱等。其基本語法格式:sp_help'觸發(fā)器名稱'③sp_helptext:用于查看觸發(fā)器的文本信息。其基本語法格式:sp_helptext'觸發(fā)器名稱'④sp_depends:用于查看指定觸發(fā)器所引用的表或指定的表涉及到的所有觸發(fā)器。其基本語法格式:sp_helptext'觸發(fā)器名稱'115【例7.14】在TSGL數(shù)據(jù)庫中,使用系統(tǒng)觸發(fā)器sp_helptrigger來查看上例中所創(chuàng)建的兩個觸發(fā)器。程序代碼如下:USETSGLGOEXECsp_helptrigger'讀者'在查詢分析器的“查詢腳本編輯器”中輸入并運行以上程序代碼,將在結(jié)果窗口顯示“讀者”表中所創(chuàng)建的觸發(fā)器,運行結(jié)果如圖7-33所示。116圖7-33調(diào)用系統(tǒng)存儲過程查看觸發(fā)器1172.修改觸發(fā)器修改觸發(fā)器可以使用SQLServer2005提供的SQLServerManagementStudio管理控制臺(企業(yè)管理器),也可以在查詢分析器中使用Transact-SQL語言修改觸發(fā)器。⑴使用企業(yè)管理器修改觸發(fā)器①啟動SQLServerManagementStudio管理控制臺,在“對象資源管理器”中展開指定的服務(wù)器和數(shù)據(jù)庫,選擇并打開要修改觸發(fā)器的數(shù)據(jù)庫,如打開TSGL數(shù)據(jù)庫。118②從打開的數(shù)據(jù)庫目錄中選擇“表”文件夾,單擊“表文件夾”,將展視“系統(tǒng)表”和用戶定義的所有表,從中選擇要修改觸發(fā)器的用戶表。如修改“讀者”表中的“讀者觸發(fā)器_老讀者退出”觸發(fā)器,則單擊該表左端的三角形按鈕將展開該表。③從展開的子目錄中選擇并右擊“讀者觸發(fā)器_老讀者退出”對象,再從彈出的快捷菜單中選擇“修改”命令,參見圖7-31。④單擊“修改”命令,將在“摘要”的編輯窗口內(nèi)顯示該觸發(fā)器的程序,可修改這個觸發(fā)器的SQL程序,如圖7-34所示。119圖7-34在查詢分析器中修改觸發(fā)器120⑵使用Transact-SQL語言修改觸發(fā)器:在查詢分析器中使用Transact-SQL語言修改觸發(fā)器的命令是:ALTERTRIGGER其基本語法格式如下:ALTERTRIGGERtrigger_name
ON(table|view)(FOR|AFTER|INSTEADOF){[DELETE][,][INSERT][,][UPDATE]}[NOTFORREPLICATION]ASsql_statement[...n]121主要參數(shù)說明如下:①trigger_name:是要修改的觸發(fā)器的名稱。②table|view:是觸發(fā)器在其上執(zhí)行的表名或視圖名。③AFTER:同創(chuàng)建觸發(fā)器語句的參數(shù)。④INSTEADOF:同創(chuàng)建觸發(fā)器語句的參數(shù)。⑤{[DELETE][,][INSERT][,][UPDATE]}|{[INSERT][,][UPDATE]}:同創(chuàng)建觸發(fā)器語句參數(shù)。⑥AS:觸發(fā)器要執(zhí)行的操作。⑦sql_statement:是觸發(fā)器的條件和操作。122⑶調(diào)用系統(tǒng)存儲過程修改觸發(fā)器的名稱:使用查詢分析器修改觸發(fā)器名稱的系統(tǒng)存儲過程是:sp_rename。其基本語法格式如下:sp_rename'object_name','new_name'主要參數(shù)說明如下:①'object_name':是觸發(fā)器的當(dāng)前名稱。②‘new_name’:是指定對象的新名稱。123【例7.15】對TSGL數(shù)據(jù)庫中“讀者”表內(nèi)的“讀者觸發(fā)器_老讀者退出”觸發(fā)器進行重命名,重新命名為“讀者觸發(fā)器新名”。程序代碼如下:
USETSGLEXECsp_rename'讀者觸發(fā)器_老讀者退出','讀者觸發(fā)器新名'在查詢分析器的“查詢腳本編輯器”中輸入并運行以上程序代碼,將修改觸發(fā)器名稱。1243.刪除觸發(fā)器只有觸發(fā)器的所有者才有權(quán)刪除已創(chuàng)建的觸發(fā)器。刪除已創(chuàng)建的觸發(fā)器可以使用SQLServer2005提供的SQLServerManagementStudio管理控制臺(企業(yè)管理器),也可以在查詢分析器中使用Transact-SQL語言刪除觸發(fā)器。⑴使用企業(yè)管理器刪除觸發(fā)器①啟動SQLServerManagementStudio管理控制臺,在“對象資源管理器”中展開指定的服務(wù)器和數(shù)據(jù)庫,選擇并打開要刪除觸發(fā)器的數(shù)據(jù)庫,如打開TSGL數(shù)據(jù)庫。125②從打開的數(shù)據(jù)庫目錄中選擇“表”文件夾,單擊“表文件夾”,將展視“系統(tǒng)表”和用戶定義的所有表,從中選擇要刪除觸發(fā)器的用戶表。如要刪除“讀者”表中的“讀者觸發(fā)器_老讀者退出”觸發(fā)器,則單擊該表左端的三角形按鈕將展開該表。③從展開的子目錄中選擇并右擊“讀者觸發(fā)器_老讀者退出”對象,再從彈出的快捷菜單中選擇“刪除”命令,參見圖7-31。④單擊“刪除”命令將彈出“刪除對象”對話框,如圖7-35所示。在該對話框內(nèi)顯示了當(dāng)前要刪除的觸發(fā)器的相關(guān)信息,如果確認要刪除這個觸發(fā)器,則單擊【刪除】按鈕即可刪除該觸發(fā)器。126圖7-35在企業(yè)管理器中刪除觸發(fā)器127⑵使用Transact-SQL語言刪除觸發(fā)器:使用Transact-SQL語言刪除指定觸發(fā)器的命令是:DROPTRIGGER。其基本語法格式如下:DROPTRIGGER{trigger}[,...n]主要參數(shù)說明如下:①trigger:是要刪除的觸發(fā)器名稱。觸發(fā)器名稱必須符合標(biāo)識符規(guī)則??梢赃x擇是否指定觸發(fā)器所有者名稱。②n:是表示可以指定多個觸發(fā)器的占位符。⑶刪除觸發(fā)器所在的表將刪除該表的所有用戶觸發(fā)器:刪除觸發(fā)器所在的表后與該表相關(guān)的觸發(fā)器也將被刪除。1287.4創(chuàng)建和管理關(guān)系圖關(guān)系圖是SQLServer2005中一種特殊的數(shù)據(jù)庫對象,關(guān)系圖可以形象、直觀地反映數(shù)據(jù)庫表與表之間的關(guān)聯(lián),使用關(guān)系圖還可以直觀地管理數(shù)據(jù)庫表。對于任何數(shù)據(jù)庫都可以創(chuàng)建任意多個數(shù)據(jù)庫關(guān)系圖;每個數(shù)據(jù)庫表可出現(xiàn)在任意多個關(guān)系圖上。因此,可以創(chuàng)建不同的關(guān)系圖使數(shù)據(jù)庫的不同部分可視化,或強調(diào)設(shè)計的不同方面。例如,可以創(chuàng)建顯示所有表和列的大關(guān)系圖,也可以創(chuàng)建顯示所有表,但不顯示列的小關(guān)系圖。創(chuàng)建的每個數(shù)據(jù)庫關(guān)系圖都存儲在關(guān)聯(lián)的數(shù)據(jù)庫中。1291.創(chuàng)建關(guān)系圖創(chuàng)建關(guān)系圖可以使用SQLServer2005提供的SQLServerManagementStudio管理控制臺(企業(yè)管理器)。⑴啟動SQLServerManagementStudio管理控制臺(企業(yè)管理器),在“對象資源管理器”中展開指定的服務(wù)器和數(shù)據(jù)庫,選擇并展開要新建關(guān)系圖的數(shù)據(jù)庫(如:為TSGL數(shù)據(jù)庫新建關(guān)系圖),右擊“數(shù)據(jù)庫關(guān)系圖”文件夾,從彈出的快捷菜單中選擇“新建數(shù)據(jù)庫關(guān)系圖”選項,如圖7-36所示。130圖7-36在企業(yè)管理器中創(chuàng)建數(shù)據(jù)庫關(guān)系圖131⑵選擇并單擊“新建數(shù)據(jù)庫關(guān)系圖”命令后,將彈出“添加表”對話框,如圖7-37所示。在這里可以選擇要創(chuàng)建關(guān)系圖的相關(guān)表,如:為“讀者”表和“借閱”表建立關(guān)系圖,則先后單擊【添加】按鈕,將這兩個表添加到企業(yè)管理器的“關(guān)系圖”窗口里。⑶從企業(yè)管理器的“關(guān)系圖”窗口內(nèi),可以清晰地看到由于TSGL數(shù)據(jù)庫中的“讀者”表、“圖書”表和“借閱”表在此之前已經(jīng)建立了約束,所以被選擇的兩個表之間被連接起來,其中“鑰匙”端指向“讀者”表,表示該表為“父表”(引用表),8字型符號端指向“借閱”表,表示該表為“從屬表”,如圖7-38所示。132圖7-37新建數(shù)據(jù)庫關(guān)系圖的添加表對話框133圖7-38在企業(yè)管理器中新建數(shù)據(jù)庫讀者_借閱關(guān)系圖134⑷在“關(guān)系圖”窗口內(nèi)單擊工具欄中的【保存】按鈕將彈出“選擇名稱”對話框,可在對話框的文本框內(nèi)輸入新建關(guān)系圖的名稱,如:讀者_借閱關(guān)系圖,然后再單擊【確定】按鈕,將保存新建的關(guān)系圖,完成關(guān)系圖的創(chuàng)建,如圖7-39所示。⑸使用企業(yè)管理器不僅可以建立兩個表的關(guān)系圖,還可以建立多個表的關(guān)系圖,如為TSGL數(shù)據(jù)庫建立“讀者”表、“圖書”表和“借閱表”三個表的關(guān)系圖,如圖7-40所示,其中,“讀者”表和“圖書”表是父表(引用表),“借閱”表是從屬表,即“借閱”表中的借書證號和圖書編號是外鍵碼,它們分別來自“讀者”表和“圖書”表。圖7-39新建數(shù)據(jù)庫關(guān)系圖的選擇名稱對話框135圖7-40讀者_圖書_借閱數(shù)據(jù)庫關(guān)系圖1362.?dāng)?shù)據(jù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 第4章 第3節(jié) 人類的聚居地-聚落(新教學(xué)設(shè)計)2023-2024學(xué)年七年級上冊地理(人教版)
- 第4課-2023-2024學(xué)年初中信息技術(shù)七年級上冊(人教版)-教學(xué)設(shè)計-總結(jié)與評價
- 10 綠(教學(xué)設(shè)計)-2023-2024學(xué)年統(tǒng)編版語文四年級下冊
- 15 可親可敬的家鄉(xiāng)人1(教學(xué)設(shè)計)2024-2025學(xué)年統(tǒng)編版道德與法治二年級上冊
- 中國自緊式外圓切斷刀行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 第7課 基督教的興起和法蘭克王國 教學(xué)設(shè)計-2023-2024學(xué)年浙江省部編版歷史與社會九年級上冊
- 熱電廠施工方案與進度安排
- 第23課 和平發(fā)展合作共贏的歷史潮流 教學(xué)設(shè)計-2023-2024學(xué)年高中歷史統(tǒng)編版(2019)必修中外歷史綱要下冊
- 農(nóng)藥運輸合同范本
- 科技創(chuàng)新中心的定義與功能
- 2023年西安經(jīng)濟技術(shù)開發(fā)區(qū)管委會招聘考試真題
- 重點語法清單2024-2025學(xué)年人教版英語八年級上冊
- 2024年全國統(tǒng)一高考數(shù)學(xué)試卷(理科)甲卷含答案
- 排水管網(wǎng)溯源排查項目專項培訓(xùn)
- 教育案例評選細則(3篇模板)
- 數(shù)字孿生水利工程建設(shè)技術(shù)導(dǎo)則(試行)
- 2024年山東化工職業(yè)學(xué)院單招職業(yè)技能測試題庫及答案解析
- 方案偏離處理措施
- (2024年)剪映入門教程課件
- 顱腦損傷的護理診斷及護理措施
- 純電動乘用車 技術(shù)條件
評論
0/150
提交評論