其他數(shù)據(jù)庫對象學習資料_第1頁
其他數(shù)據(jù)庫對象學習資料_第2頁
其他數(shù)據(jù)庫對象學習資料_第3頁
其他數(shù)據(jù)庫對象學習資料_第4頁
其他數(shù)據(jù)庫對象學習資料_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第10章 其他數(shù)據(jù)庫對象學習目標本章重點本章內(nèi)容10/12/20221學習目標標從業(yè)務數(shù)數(shù)據(jù)角度度來看,同一種種業(yè)務數(shù)數(shù)據(jù)有可可能分散散在不同同的表中中,如何何從一個個數(shù)據(jù)庫庫對象中中查看這這些分散散存儲的的數(shù)據(jù)呢呢?從安全角角度來看看,不同同的操作作人員或或許只能能看到表表中不同同部分的的數(shù)據(jù)。從數(shù)據(jù)的的應用角角度來看看,一個個報表中中的數(shù)據(jù)據(jù)往往來來自于多多個不同同的表中中,如何何提高報報表的設設計效率率呢?視視圖是解解決這些些問題的的一種有有效手段段。存儲過程程是一個個可重用用的代碼碼模塊,可以高高效率地地完成指指定的操操作。觸發(fā)器是是一種特特殊類型型的存儲儲過程,可以實實現(xiàn)自動動化的操

2、操作。用戶定義義函數(shù)是是由用戶戶根據(jù)自自己應用用程序的的需要而而定義的的可以完完成特定定操作的的函數(shù)。本章將全全面研究究視圖、存儲過過程、觸觸發(fā)器、用戶定定義函數(shù)數(shù)等數(shù)據(jù)據(jù)庫對象象的特點點和使用用方式。1/15/20202本章重點點視圖特點點和類型型管理視圖圖存儲過程程特點和和類型管理存儲儲過程觸發(fā)器特特點和類類型管理觸發(fā)發(fā)器用戶定義義函數(shù)1/15/20203本章內(nèi)容容10.1視視圖10.2存存儲過程程10.3觸觸發(fā)器10.4用用戶定義義函數(shù)10.5上上機練習習10.6習習題1/15/20204本章內(nèi)容容10.1視視圖10.2存存儲過程程10.3觸觸發(fā)器10.4用用戶定義義函數(shù)10.5上上機練

3、習習10.6習習題1/15/2020510.1視視圖本節(jié)全面面研究與與視圖有有關(guān)的內(nèi)內(nèi)容。首先,分分析視圖圖的作用用和存在在意義。其次,研研究了視視圖的類類型和特特點。接下來,探討創(chuàng)創(chuàng)建視圖圖技術(shù)。然后,討討論如何何通過視視圖修改改表中數(shù)數(shù)據(jù)。最后,瀏瀏覽如何何通過圖圖形化工工具來創(chuàng)創(chuàng)建和維維護視圖圖。1/15/20206概述數(shù)據(jù)是存存儲在表表中,對對數(shù)據(jù)的的操縱主主要是通通過表進進行的。但是,僅僅通通過表操操縱數(shù)據(jù)據(jù)會帶來來一系列列的性能能、安全全、效率率等問題題。下面面,對這這些問題題進行分分析。從業(yè)務數(shù)數(shù)據(jù)角度度來看,由于數(shù)數(shù)據(jù)庫設設計時考考慮到數(shù)數(shù)據(jù)異常常等問題題,同一一種業(yè)務務數(shù)據(jù)有

4、有可能被被分散在在不同的的表中,但是對對這種業(yè)業(yè)務數(shù)據(jù)據(jù)的使用用經(jīng)常是是同時使使用的。前面講講過的連連接、子子查詢、聯(lián)合等等技術(shù)就就是解決決這種問問題的一一種手段段。但是是,對于于多個表表來說這這些操作作都是比比較復雜雜的,能能不能只只通過一一個數(shù)據(jù)據(jù)庫對象象就可以以同時看看到這些些分散存存儲的業(yè)業(yè)務數(shù)據(jù)據(jù)呢?如如果能得得話,將將大大簡簡化查詢詢語句的的復雜程程度。從數(shù)據(jù)安安全角度度來看,由于工工作性質(zhì)質(zhì)和需求求不同,不同的的操作人人員只是是需要查查看表中中的部分分數(shù)據(jù),不能查查看表中中的所有有數(shù)據(jù)。從數(shù)據(jù)的的應用角角度來看看,在設設計報表表時,需需要明確確地指定定數(shù)據(jù)的的來源途途徑和方方式。

5、能能不能采采取有效效手段,提高報報表的設設計效率率呢?解決上述述問題的的一種有有效手段段就是視視圖。1/15/20207視圖的內(nèi)內(nèi)容基表的列列的子集集或行的的子集,也就是是說視圖圖可以是是基表的的其中一一部分。兩個或多多個基表表的聯(lián)合合,也就就是說視視圖是對對多個基基表進行行聯(lián)合運運算檢索索的SELECT語句句。兩個或多多個基表表的連接接,也就就是說視視圖是通通過對若若干個基基表的連連接生成成的。基表的統(tǒng)統(tǒng)計匯總總,也就就是說視視圖不僅僅是基表表的投影影,還可可以是經(jīng)經(jīng)過對基基表的各各種復雜雜運算的的結(jié)果。另外一個個視圖的的子集,也就是是說視圖圖既可以以基于表表,也可可以基于于另外一一個視圖圖

6、。來自于函函數(shù)或同同義詞中中的數(shù)據(jù)據(jù)。視圖和基基表的混混合,在在視圖的的定義中中,視圖圖和基表表可以起起到同樣樣的作用用。1/15/20208視圖類型型在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,可可以把視視圖分成成3種類類型,即即標準視視圖、索索引視圖圖和分區(qū)區(qū)視圖。一般情況況下的視視圖都是是標準視視圖,它它是一個個虛擬表表并不占占物理存存儲空間間。如果果希望提提高聚合合多行數(shù)數(shù)據(jù)的視視圖性能能,那么么可以創(chuàng)創(chuàng)建索引引視圖。索引視圖圖是被物物理化的的視圖,它包含含有經(jīng)過過計算的的物理數(shù)數(shù)據(jù)。通過使用用分區(qū)視視圖,可可以連接接一臺或或多臺服服務器中中成員表表中的分分區(qū)數(shù)據(jù)據(jù),使得

7、得這些數(shù)數(shù)據(jù)看起起來就像像來自一一個表中中一樣。1/15/20209創(chuàng)建視圖圖在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,主主要使用用CREATE VIEW語語句創(chuàng)建建視圖。只能在在當前數(shù)數(shù)據(jù)庫中中創(chuàng)建視視圖。當當創(chuàng)建視視圖時,Microsoft SQLServer首首先驗證證視圖定定義中所所引用的的對象是是否存在在。視圖的名名稱應該該符合命命名規(guī)則則。是否否指定視視圖的架架構(gòu)則是是可選的的。視圖圖的外表表和表的的外表是是一樣的的,因此此為了區(qū)區(qū)別表和和視圖,建議采采用一種種命名機機制,使使人容易易分辨出出視圖和和表,例例如可以以在視圖圖名稱之之前使用用vw_作為前前綴。1/15

8、/202010【例10-1】使用CREATEVIEW語句句創(chuàng)建簡簡單的視視圖1/15/202011【例10-2】使用sp_helptext系統(tǒng)統(tǒng)存儲過過程查看看視圖信信息1/15/202012【例10-3】使用WITH ENCRYPTION子子句加密密視圖定定義文本本信息1/15/202013【例10-4】使用DROP VIEW語語句刪除除視圖1/15/202014通過視圖圖修改數(shù)數(shù)據(jù)無論在什什么時候候修改視視圖的數(shù)數(shù)據(jù),實實際上都都是在修修改視圖圖的基表表中的數(shù)數(shù)據(jù)。在在滿足一一定的限限制條件件下,可可以通過過視圖自自由地插插入、刪刪除和更更新基表表中的數(shù)數(shù)據(jù)。在修改視視圖時,要注意意一些條

9、條件1/15/202015【例10-5】通過視視圖修改改數(shù)據(jù)1/15/202016【例10-5】1/15/202017使用SQLServerManagementStudio除了使用用CREATE VIEW語語句之外外,也可可以使用用SQL ServerManagement Studio圖形形化工具具定義視視圖。1/15/202018【例10-6】使用圖圖形化工工具定義義視圖1/15/202019本章內(nèi)容容10.1視視圖10.2存存儲過程程10.3觸觸發(fā)器10.4用用戶定義義函數(shù)10.5上上機練習習10.6習習題1/15/20202010.2存存儲過程程存儲過程程可以提提高應用用程序的的設計效效

10、率和增增強系統(tǒng)統(tǒng)的安全全性。本節(jié)全面面介紹存存儲過程程的特點點、類型型、創(chuàng)建建及執(zhí)行行等內(nèi)容容。1/15/202021存儲過程程的特點點存儲過程程是一個個可重用用的代碼碼模塊,可以高高效率地地完成指指定的操操作。在在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,既既可以使使用Transact-SQL語言言編寫存存儲過程程,也可可以使用用CLR方式編編寫存儲儲過程。使用CLR編編寫存儲儲過程是是Microsoft SQLServer2005系統(tǒng)統(tǒng)與.NET框框架緊密密集成的的一種表表現(xiàn)形式式。使用Transact-SQL語言言編寫存存儲過程程而不使使用存儲儲在客戶戶端計算算機上的的Tr

11、ansact-SQL語言有有許多優(yōu)優(yōu)點1/15/202022存儲過程程的類型型在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,提提供了3種基本本的存儲儲過程類類型,即即用戶定定義的存存儲過程程、擴展展存儲過過程和系系統(tǒng)存儲儲過程。用戶定義義的存儲儲過程是是主要的的存儲過過程類型型,是封封裝了可可重用代代碼的模模塊或例例程。用戶定義義的存儲儲過程可可以接受受輸入?yún)?shù)、向向客戶端端返回表表格或標標量結(jié)果果和消息息、調(diào)用用數(shù)據(jù)定定義語言言、數(shù)據(jù)據(jù)操縱語語言語句句,然后后返回參參數(shù)。在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,用用戶定義義的存儲儲過程又又可以分分為Transa

12、ct-SQL類型型的存儲儲過程和和CLR類型的的存儲過過程。1/15/202023擴展存儲儲過程擴展存儲儲過程是是指使用用某種變變成語言言如C語語言創(chuàng)建建的外部部例程,是可以以在MicrosoftSQLServer實例中中動態(tài)加加載和運運行的DLL。但是,微微軟公司司宣布從從Microsoft SQLServer2005版本本開始,將逐步步刪除擴擴展存儲儲過程類類型,這這是因為為使用CLR存存儲過程程可以可可靠和安安全地替替代擴展展存儲過過程的功功能。1/15/202024系統(tǒng)存儲儲過程系統(tǒng)存儲儲過程是是指用來來完成MicrosoftSQL Server2005中許多多管理活活動的特特殊存儲儲

13、過程。從物理上上來看,系統(tǒng)存存儲過程程存儲在在Resource系系統(tǒng)數(shù)據(jù)據(jù)庫中,并且?guī)в衧p_前綴綴。從邏輯上上來看,系統(tǒng)存存儲過程程出現(xiàn)在在每個系系統(tǒng)數(shù)據(jù)據(jù)庫和用用戶數(shù)據(jù)據(jù)庫的sys架架構(gòu)中。在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,主主要的系系統(tǒng)存儲儲過程類類型和功功能如表表10-1所示示。1/15/202025創(chuàng)建存儲儲過程的的規(guī)則在設計和和創(chuàng)建存存儲過程程中應該該滿足一一定的約約束和規(guī)規(guī)則。只只有滿足足了這些些約束和和規(guī)則,才可以以創(chuàng)建有有效的存存儲過程程。雖然說在在CREATE PROCEDURE語句句中可以以包括任任意數(shù)量量和類型型的Transact-SQL語句句

14、,但是是某些特特殊的語語句是不不能包含含在存儲儲過程定定義中的的。1/15/202026創(chuàng)建存儲儲過程在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,可可以使用用CREATE PROCEDURE語句句創(chuàng)建存存儲過程程。需要要強調(diào)的的是,必必須具有有CREATE PROCEDURE權(quán)限限才能創(chuàng)創(chuàng)建存儲儲過程,存儲過過程是架架構(gòu)作用用域中的的對象,只能在在本地數(shù)數(shù)據(jù)庫中中創(chuàng)建存存儲過程程。在創(chuàng)建存存儲過程程時,應應該指定定所有的的輸入?yún)?shù)、執(zhí)執(zhí)行數(shù)據(jù)據(jù)庫操作作的編程程語句、返回至至調(diào)用過過程或批批處理表表明成功功或失敗敗的狀態(tài)態(tài)值、捕捕捉和處處理潛在在錯誤的的錯誤處處理語句句。1/15

15、/202027CREATEPROCEDURE語句CREATEPROCEDURE procedure_nameparameter_namedata_type, WITH procedure_optionASsql_statement1/15/202028【例10-7】使用CREATEPROCEDURE語句創(chuàng)創(chuàng)建存儲儲過程1/15/202029【例10-8】使用OUTPUT關(guān)關(guān)鍵字創(chuàng)創(chuàng)建存儲儲過程1/15/202030執(zhí)行存儲儲過程在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,可可以使用用EXECUTE語句句執(zhí)行存存儲過程程。EXECUTE語句也也可以簡簡寫為EXEC。如果將要要執(zhí)行的

16、的存儲過過程需要要參數(shù),那么應應該在存存儲過程程名稱后后面帶上上參數(shù)值值。1/15/202031【例10-9】使用EXEC語句執(zhí)執(zhí)行存儲儲過程1/15/202032【例10-10】執(zhí)行行帶有參參數(shù)的存存儲過程程1/15/202033【例10-11】在執(zhí)執(zhí)行EXEC語語句時引引用參數(shù)數(shù)和使用用OUTPUT關(guān)鍵字字1/15/202034修改和刪刪除存儲儲過程在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,可可以使用用ALTERPROCEDURE語句修修改已經(jīng)經(jīng)存在的的存儲過過程。修修改存儲儲過程不不同于刪刪除和重重建存儲儲過程,其目的的是保持持存儲過過程的權(quán)權(quán)限不發(fā)發(fā)生變化化。例如,如如

17、果修改改HumanResources.GetEmployeeInfo存儲過過程,那那么與該該存儲過過程對象象相關(guān)的的權(quán)限將將不會發(fā)發(fā)生任何何變化。但是,如果刪刪除HumanResources.GetEmployeeInfo存儲儲過程并并且重新新創(chuàng)建同同名的存存儲過程程,那么么該存儲儲過程對對象相關(guān)關(guān)的權(quán)限限都需要要重新定定義。如果數(shù)據(jù)據(jù)庫中某某個存儲儲過程不不再需要要了,可可以使用用DROPPROCEDURE語語句刪除除該存儲儲過程。這種刪刪除是永永久性的的,不能能恢復。1/15/202035存儲過程程的執(zhí)行行過程存儲過程程創(chuàng)建之之后,在在第一次次執(zhí)行時時需要經(jīng)經(jīng)過語法法分析階階段、解解析階段

18、段、編譯譯階段和和執(zhí)行階階段。語法分析析階段是是指創(chuàng)建建存儲過過程時,系統(tǒng)檢檢查其創(chuàng)創(chuàng)建語句句的語法法正確性性的過程程。在存存儲過程程的創(chuàng)建建過程中中如果碰碰到語法法錯誤,那么該該存儲過過程創(chuàng)建建失敗。如果語語法檢查查通過之之后,系系統(tǒng)將該該存儲過過程的名名稱存儲儲在當前前數(shù)據(jù)庫庫的sys.sql_modules目錄錄視圖中中。解析階段段是指某某個存儲儲過程首首次執(zhí)行行時,查查詢處理理器從sys.sql_modules目目錄視圖圖中讀取取該存儲儲過程的的文本并并且檢查查該過程程引用的的對象名名稱是否否存在的的過程。編譯階段段是指分分析存儲儲過程和和生成存存儲過程程執(zhí)行計計劃的過過程。執(zhí)行階段段

19、是指執(zhí)執(zhí)行駐留留在過程程高速緩緩沖存儲儲區(qū)中的的存儲過過程的執(zhí)執(zhí)行計劃劃的過程程。1/15/202036查看存儲儲過程的的信息在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,可可以使用用系統(tǒng)存存儲過程程和目錄錄視圖查查看有關(guān)關(guān)存儲過過程的信信息。如果希望望查看存存儲過程程的定義義信息,那么可可以使用用sys.sql_modules目錄視視圖、OBJECT_DEFINITION元數(shù)數(shù)據(jù)函數(shù)數(shù)、sp_helptext系統(tǒng)存存儲過程程等。1/15/202037【例10-12】查看看存儲過過程信息息1/15/202038本章內(nèi)容容10.1視視圖10.2存存儲過程程10.3觸觸發(fā)器10.4用用

20、戶定義義函數(shù)10.5上上機練習習10.6習習題1/15/20203910.3觸觸發(fā)器MicrosoftSQL Server2005系統(tǒng)提提供了兩兩種強制制業(yè)務邏邏輯和數(shù)數(shù)據(jù)完整整性的機機制,即即約束技技術(shù)和觸觸發(fā)器技技術(shù)。前面已經(jīng)經(jīng)講過了了約束技技術(shù),本本節(jié)講述述觸發(fā)器器技術(shù)。1/15/202040觸發(fā)器類類型按照觸發(fā)發(fā)事件的的不同,可以把把Microsoft SQLServer2005系統(tǒng)統(tǒng)提供的的觸發(fā)器器分成兩兩大類型型,即DML觸觸發(fā)器和和DDL觸發(fā)器器。需要要補充的的是,DDL觸觸發(fā)器是是Microsoft SQLServer2005系統(tǒng)統(tǒng)新增的的功能,以前的的版本只只有DML觸發(fā)發(fā)器

21、。當數(shù)據(jù)庫庫中發(fā)生生數(shù)據(jù)操操縱語言言(datamanipulation language,DML)事事件時將將調(diào)用DML觸觸發(fā)器。DML事件包包括在指指定表或或視圖中中修改數(shù)數(shù)據(jù)的INSERT語語句、UPDATE語語句或DELETE語語句。在在DML觸發(fā)器器中,可可以執(zhí)行行查詢其其他表的的操作,也可以以包含更更加復雜雜的Transact-SQL語句句。DML觸發(fā)發(fā)器將觸觸發(fā)器本本身和觸觸發(fā)事件件的語句句作為可可以在觸觸發(fā)器內(nèi)內(nèi)回滾的的單個事事務對待待。也就就是說,當在執(zhí)執(zhí)行觸發(fā)發(fā)器操作作過程中中,如果果檢測到到錯誤發(fā)發(fā)生,則則整個觸觸發(fā)事件件語句和和觸發(fā)器器操作的的事務自自動回滾滾。DDL觸觸

22、發(fā)器與與DML觸發(fā)器器相同的的是,都都需要觸觸發(fā)事件件進行觸觸發(fā)。但但是,DDL觸觸發(fā)器的的觸發(fā)事事件是數(shù)數(shù)據(jù)定義義語言(datadefinition language,DDL)語語句。1/15/202041DML觸觸發(fā)器的的基本類類型按照觸發(fā)發(fā)器事件件類型的的不同,可以把把Microsoft SQLServer2005系統(tǒng)統(tǒng)DML觸發(fā)器器分成3種類型型,即INSERT類類型、UPDATE類類型和DELETE類類型。這也是DML觸觸發(fā)器的的基本類類型。1/15/202042創(chuàng)建DML觸發(fā)發(fā)器DML觸觸發(fā)器是是一種特特殊類型型的存儲儲過程,所以DML觸觸發(fā)器的的創(chuàng)建和和存儲過過程的創(chuàng)創(chuàng)建方式式有

23、很多多相似的的地方??梢允故褂肅REATETRIGGER語句創(chuàng)創(chuàng)建DML觸發(fā)發(fā)器。在CREATE TRIGGER語語句中,指定了了定義觸觸發(fā)器的的基表或或視圖、觸發(fā)事事件的類類型和觸觸發(fā)的時時間、觸觸發(fā)器的的所有指指令等內(nèi)內(nèi)容。使用CREATETRIGGER語句創(chuàng)創(chuàng)建DML觸發(fā)發(fā)器1/15/202043CREATETRIGGER語句句CREATETRIGGERtrigger_nameONtable_name_or_view_nameWITH ENCRYPTION FOR| AFTER |INSTEADOF DELETE , INSERT , UPDATE ASsql_statement1/15

24、/202044【例10-13】查看看觸發(fā)器器信息1/15/202045DML觸觸發(fā)器的的工作原原理前面介紹紹了DML觸發(fā)發(fā)器的基基本概念念、類型型、特點點、創(chuàng)建建、修改改、刪除除等內(nèi)容容,現(xiàn)在在我們來來看看觸觸發(fā)器是是如何工工作的。通過了了解觸發(fā)發(fā)器的工工作原理理,就可可以更好好地使用用觸發(fā)器器,寫出出效率更更高的觸觸發(fā)器。下面主要要介紹INSERT、DELETE和UPDATE類型型觸發(fā)器器的工作作原理。1/15/202046INSERT觸觸發(fā)器的的工作原原理當向表中中插入數(shù)數(shù)據(jù)時,INSERT觸發(fā)器器觸發(fā)執(zhí)執(zhí)行。當當INSERT觸發(fā)器器觸發(fā)時時,新的的記錄增增加到觸觸發(fā)器表表中和insert

25、ed表中中。該inserted表表是一個個邏輯表表,保存存了所插插入記錄錄的拷貝貝,允許許用戶參參考INSERT語句句中數(shù)據(jù)據(jù)。觸發(fā)發(fā)器可以以檢查inserted表,來確定定該觸發(fā)發(fā)器的操操作是否否應該執(zhí)執(zhí)行和如如何執(zhí)行行。在inserted表中中的那些些記錄,總是觸觸發(fā)器表表中一行行或多行行記錄的的冗余。1/15/202047DELETE觸觸發(fā)器的的工作原原理當觸發(fā)一一個DELETE觸發(fā)發(fā)器時,被刪除除的記錄錄放在一一個特殊殊的deleted表表中。deleted表是一一個邏輯輯表,用用來保存存已經(jīng)從從表中刪刪除的記記錄。該該deleted表允允許參考考原來的的DELETE語句刪刪除的已已經(jīng)

26、記錄錄在日志志中的數(shù)數(shù)據(jù)。當當使用DELETE語語句時,應該考考慮下列列一些因因素:當記錄放放在deleted表表中的時時候,該該記錄就就不會存存在數(shù)據(jù)據(jù)庫的表表中了。因此,在數(shù)據(jù)據(jù)庫表和和deleted表之之間沒有有共同的的記錄。邏輯表deleted總是存存放在內(nèi)內(nèi)存中,以提供供性能。在DELETE觸發(fā)器器中,不不能包括括TRUNCATETABLE語語句,這這是因為為該語句句是不記記日志的的操作。1/15/202048UPDATE觸觸發(fā)器的的工作原原理修改一條條記錄就就等于插插入一條條新記錄錄和刪除除一條舊舊記錄。同樣,UPDATE語句也也可以看看成是由由刪除一一條記錄錄的DELETE語句句

27、和增加加一條記記錄的INSERT語語句組成成。當在在某一個個有UPDATE觸發(fā)發(fā)器表的的上面修修改一條條記錄時時,表中中原來的的記錄移移動到deleted表中,修改過過的記錄錄插入到到了inserted表中。觸發(fā)器器可以檢檢查deleted表表和inserted表及被被修改的的表,以以便確定定是否修修改了多多個行和和應該如如何執(zhí)行行觸發(fā)器器的操作作。1/15/202049一個具體體的示例例為了更加加全面地地掌握開開發(fā)觸發(fā)發(fā)器的步步驟和技技術(shù),本本節(jié)通過過一個具具體的示示例,全全面講述述使用Transact-SQL語語言開發(fā)發(fā)和創(chuàng)建建觸發(fā)器器的技術(shù)術(shù)。一般地,開發(fā)觸觸發(fā)器的的過程包包括用戶戶需求

28、分分析、確確定觸發(fā)發(fā)器的邏邏輯結(jié)構(gòu)構(gòu)、編寫寫觸發(fā)器器代碼和和測試觸觸發(fā)器。1/15/202050【例10-14】設計計和實現(xiàn)現(xiàn)DML觸發(fā)器器1/15/202051創(chuàng)建t_accountData_insert觸發(fā)器器1/15/202052創(chuàng)建t_accountData_delete觸發(fā)1/15/202053一組插入入數(shù)據(jù)的的操作1/15/202054審計到的的插入數(shù)數(shù)據(jù)的操操作1/15/202055一組刪除除數(shù)據(jù)的的操作1/15/202056審計到的的刪除數(shù)數(shù)據(jù)的操操作1/15/202057DDL觸觸發(fā)器DDL觸觸發(fā)器與與DML觸發(fā)器器有許多多類似的的地方,如可以以自動觸觸發(fā)完成成規(guī)定的的操作、

29、都可以以使用CREATETRIGGER語句句創(chuàng)建等等,但是是也有一一些不同同的地方方。例如,DDL觸觸發(fā)器的的觸發(fā)事事件主要要是CREATE、ALTER、DROP以及GRANT、DENY及REVOKE等語語句,并并且觸發(fā)發(fā)的時間間條件只只有AFTER,沒有有INSTEADOF。1/15/202058【例10-15】使用用DDL觸發(fā)器器1/15/202059本章內(nèi)容容10.1視視圖10.2存存儲過程程10.3觸觸發(fā)器10.4用用戶定義義函數(shù)10.5上上機練習習10.6習習題1/15/20206010.4用用戶定義義函數(shù)在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,用用戶定義義函數(shù)是是

30、接受參參數(shù)、執(zhí)執(zhí)行操作作并且將將運算結(jié)結(jié)果以值值的形式式返回的的例程。這種返回回值既可可以是單單個標量量值,也也可以是是一個結(jié)結(jié)果集。在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,用用戶定義義函數(shù)既既可以使使用Transact-SQL語言言編寫,也可以以使用任任何.NET編編程語言言來編寫寫。1/15/202061特點在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,所所有的用用戶定義義函數(shù)都都具有相相同的由由兩部分分組成的的結(jié)構(gòu):標題和和正文。標題可以以定義這這些內(nèi)容容:具有有可選架架構(gòu)/所所有者名名稱的函函數(shù)名稱稱;輸入入?yún)?shù)名名稱和數(shù)數(shù)據(jù)類型型;可以以用于輸輸入?yún)?shù)數(shù)

31、的選項項;返回回參數(shù)數(shù)數(shù)據(jù)類型型和可選選名稱;可以用用于返回回參數(shù)的的選項等等。正文定義義了函數(shù)數(shù)將要執(zhí)執(zhí)行的操操作,這這些操作作既可以以是一個個或多個個Transact-SQL語句,也可以以是.NET程程序集的的引用。在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,用用戶定義義函數(shù)又又可以分分為兩大大類,即即用戶定定義標量量函數(shù)和和用戶定定義表值值函數(shù)。用戶定定義標量量函數(shù)返返回在RETURNS子句中中定義的的類型的的單個數(shù)數(shù)據(jù)值。對于多多語句標標量函數(shù)數(shù),定義義在BEGIN END塊中中的函數(shù)數(shù)體包含含一系列列返回單單個值的的Transact-SQL語句。返回類類型可以以是除te

32、xt、ntext、image、cursor、timestamp以以外的任任何數(shù)據(jù)據(jù)類型。用戶定定義表值值函數(shù)返返回table數(shù)據(jù)類類型。實實際上,在表值值函數(shù)中中,表是是單個SELECT語語句的結(jié)結(jié)果集。1/15/202062創(chuàng)建時的的考慮在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,可可以分別別使用CREATEFUNCTION、ALTERFUNCTION、DROPFUNCTION語句句來實現(xiàn)現(xiàn)用戶定定義函數(shù)數(shù)的創(chuàng)建建、修改改和刪除除。在創(chuàng)創(chuàng)建用戶戶定義函函數(shù)時,每個完完全限定定用戶函函數(shù)的名名稱(schema_name.function_name)必須須唯一。函數(shù)的BEGINEN

33、D塊塊中的語語句不能能有任何何副作用用。函數(shù)數(shù)副作用用是指對對具有函函數(shù)外作作用域(例如修修改數(shù)據(jù)據(jù)庫表)的資源源狀態(tài)的的任何永永久性更更改。函函數(shù)中的的語句唯唯一能做做的更改改是對函函數(shù)上的的局部對對象(如如局部游游標或局局部變量量)的更更改。不不能在函函數(shù)中執(zhí)執(zhí)行的操操作包括括對數(shù)據(jù)據(jù)庫表的的修改、對不在在函數(shù)上上的局部部游標進進行操作作、發(fā)送送電子郵郵件、嘗嘗試修改改目錄,以及生生成返回回至用戶戶的結(jié)果果集。1/15/202063使用CREATEFUNCTION語句句在Microsoft SQLServer2005系統(tǒng)統(tǒng)中,使使用CREATEFUNCTION語句句可以創(chuàng)創(chuàng)建標量量函數(shù)、內(nèi)聯(lián)表表值函數(shù)數(shù)、多語語句表值值函數(shù)。需要說說明的是是,如

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論