SQL-SERVER數據庫中的遊標、存儲過程和觸發器 關鍵詞 SQL-SERVER、遊標、存儲過程、觸發器、高效處理數據

   SQL-SERVER是一種關係型數據庫管理系統,可以與WINDOWS平臺緊密集成,以一種簡單的方式來完成各類複雜的任務。SQL-SERVER管 理大量數據,容許大量用戶進行併發訪問,維護數據的完整性和安全性。本文正是從遊標、存儲過程、觸發器三個方面論述SQL-SERVER高效處理數據的方法。數據庫

1 SQL-SERVER數據庫簡介 SQL-SERVER是一個功能完備而強大的數據庫管理系統。在SQL-SERVER中,數據和程序被劃分爲不一樣的邏輯組件,稱爲數據庫對象,經過訪問和管理數據庫對象來訪問和管理SQL-SERVER中的信息。表是SQL-SERVER中的最重要的數據庫對象。數據庫被存儲在一個或者多個數據庫文件中。關係數據庫系統是讓用戶用語句來得到和修改與實體相關的信息。全部的主流數據庫都支持用標準的SQL語言來做業。 2 SQL-SERVER數據庫中的遊標、存儲過程、觸發器 2.1 遊標的做用、功能及其優勢 SQL-SERVER中的「遊標」是一種數據庫對象,應用程序用它來對結果集實行「行集」操做。 SQL-SERVER支持CLIENT遊標、API SERVER遊標和T-SQL遊標。T-SQL遊標和其它種類的遊標區別是:T-SQL遊標在存儲過程、批處理、函數、或觸發器中使用,用於重複對光標每一行的定製的處理。其它種類的遊標被設計用於從客戶應用程序中訪問數據庫信息。本文以T-SQL遊標爲例。  下面,聲明一個FORWARD_ONLY遊標,該遊標容許對其數據進行修改。在查詢分析器中執行下列語句:  DECLARE JobsCursor CURSOR FORWARD_ONLY FOR SELECT * FROM jobs WHERE min_lvl=75 FOR UPDATE OPEN JobsCursor FET CH JobsCursor UPDATE jobs SET max_lvl=100 WHERE CURRENT OF JobsCursor SELECT * FROM jobs WHERE min_lvl=75 CLOSE JobsCursor DEALLOCATE JobsCursor  遊標的優勢: 遊標的這種行集設計方法是處理數據的一個強有力的工具。 2.2 存儲過程的做用、功能及其優勢 SQL-SERVER中的「存儲過程」是一組預編譯的SQL語句。T-SQL語句是充當SQL-SERVER數據庫和用戶應用程序間的編程接口。存儲和執行T-SQL程序的方法有兩種,一種是本地存儲程序,另外一種是將程序存儲爲SQL-SERVER中的「存儲過程」,而後建立應用程序執行存儲過程。 經過編寫存儲過程來運行常常執行的管理任務,或者應用複雜的業務規則。SQL-SERVER中的存儲過程分爲「系統存儲過程」和「用戶定義的存儲過程」。系統存儲過程用以管理SQL-SERVER和顯示有關數據庫和用戶的信息,系統存儲過程充當從系統表中檢索信息的快捷方式,如:sp-stored-procedures列出當前環境中的全部存儲過程。 SQL-SERVER存儲過程具備如下幾點功能: a. 經過輸入,輸出參數與調用程序通信; b. 返回一個稱爲返回代碼的整型值,以代表過程的執行狀態; c. 具備方便的從新編譯其過程的方法,用EXECUTE與WITH RECOMPILE 子句; 下面,聲明一個簡單的存儲過程。在查詢分析器中執行下列語句: create procedure ss  @intvalue1 int,@intvalue2 int,@inttotal int output as select @inttotal=@intvalue1+@intvalue2 go declare @inttotal int exec ss 15,9, @inttotal output print ‘the total of 15 and 9 is’+convert(char(8), @inttotal) 執行結果爲:the total of 15 and 9 is 25 存儲過程具備如下優勢: a. 容許模塊化程序設計。 b. 只需建立過程一次並將其存儲在數據庫中,之後便可在程序中調用該過程任意次。存儲過程可獨立於程序源代碼而單獨修改。 c. 運行速度快。存儲過程將比T-SQL批代碼的執行要快。存儲過程是被編譯後存放在數據庫服務器的過程高速緩存中,當使用時,服務器沒必要再從新分析和編譯它們。 d. 減小網絡流量。在網絡中要發送的數百行代碼,可由一條執行其過程代碼的一條單獨語句就可實現。 e. 有安全機制。可授予沒有直接執行存儲過程當中語句的權限的用戶,也可執行該存儲過程的權限。另外能夠防止用戶直接訪問表,強制用戶使用存儲過程執行特定的任務。 2.3 觸發器的做用、功能及其優勢 SQL-SERVER中的「觸發器」是一種強制業務規則和數據完整性的一種類型機制,它是一種特殊類型的存儲過程。SQL-SERVER有兩種類型的觸發器:「AFTER觸發器」和 「INSTEAD OF觸發器」。 觸發器具備如下幾點功能: a. 以「偵測」數據庫內的操做,確保輸入表中的數據的有效性; b. 實現「層疊刪除」 ,如在表INVENTORY和INVENTORY PROPERTY之間不存在外鍵,但用一個觸發器能夠監視INVENTORY表中記錄的刪除狀況,及另外一個表與之有關聯的記錄; c. 訪問「INSERTED表」和」DELETED表中的內容。如對更新類型觸發器的表來說,將在「刪除表」中存放舊值,而在「插入表」中存放新值。刪除表和插入表是每一個觸發器都有的兩個特殊的虛擬表,這兩個表是邏輯表,並動態存貯在內存中; 下面,將建立一個UPDATE觸發器,以確保PRODUCTS表中現有的UnitsOnOrder和ReorderLevel列不會被修改成小於10的值。每次執行此操做時,都執行該觸發器。如下是在查詢分析器中實現的T-SQL塊: CREATE TRIGGER CheckProductUpdate ON Products For UPDATE AS IF((SELECT UnitsOnOrder FROM INSERTED)<10) OR((SELECT ReorderLevel FROM INSERTED)<10) BEGIN PRINT ‘錯誤,不能小於10!’ ROLLBACK TRANSACTION END 執行下面的語句: UPDATE Products SET UnitsOnOrder=5 WHERE ProductID=5 執行結果爲:錯誤,不能小於10! 保證了UnitsOnOrder和ReorderLevel列不會被修改成小於10的值。 d. 「INSEAD OF觸發器」提供了基於聯接條件的視圖所「不支持」的數據刪除操做。INSTEAD OF觸發器能夠基於一個數據修改操做。這是SQL-SERVER觸發器的另外一個重要功能之一; 下面建立一個基於employee表和publisher表的視圖,要使對此視圖進行更新,必須經過INSTEAD OF觸發器來刪除數據。  如下是在查詢分析器中的T-SQL塊: CREATE VIEW Emp_pub As  SELECT emp_id,lname,job_id,pub_name FROM employee e,publishers p WHERE e.pub_id=p.pub_id CREATE TRIGGER del_emp ON Emp_pub INSERTED OF DELETE AS DELETE employee WHERE emp_id IN (SELECT emp_id FROM DELETED) 執行下面的語句,刪除數據。 DELETE Emp_pub WHERE emp_id=’POK93028M’ e. 觸發器與存儲過程相似,亦可進行加密處理。以保證代碼的安全。 觸發器的優缺點:觸發器經常使用於強制業務規則和數據完整性的強大工具。據資料分析,提倡簡化使用觸發器,沒有必要使代碼太複雜而讓人費解。也不要太多使用觸發器,由於觸發器的執行,高度和管理很複雜。  3 遊標、存儲過程、觸發器三者的聯繫 SQL-SERVER數據庫中的遊標、存儲過程、觸發器三者從不一樣方面提升了數據處理能力。參見下面的圖1. 觸發器是一種特殊類型的存儲過程,它主要是經過事件進行觸發而被執行的,而存儲過程是經過存儲過程的名字而被直接調用;遊標可提供腳本,存儲過程和觸發器中使用的訪問結果集中的數據的T-SQL語句。     圖1 高效處理數據圖 4 結 論 SQL-SERVER是一個關係數據庫,用於各類企業組織及專業數據庫和應用開發環境中。能迅速地設計和開發客戶/服務器。 遊標的行集操做設計方法是一個強有力的工具,要合理使用遊標。遊標主要用於實現一些不能使用面向集合的語句實現的操做。 T-SQL的存儲過程的功能強大,甚至能夠實現最複雜的商業事務,存儲過程結合了過程和非過程兩種方法。具備通信、模塊設計、執行快等優勢。 「觸發器」是一種強制業務規則和數據完整性的一種類型機制,它是一種特殊類型的存儲過程。觸發器中的兩個虛擬表及SQL-SERVER 2000新應用的INSEAD OF 觸發器都是SQL-SERVER中強制業務規則的強有力工具。 總之,SQL-SERVER中的遊標、存儲過程和觸發器是SQL-SERVER數據庫靈魂的三個重要方面。另外,它們 「高效處理數據庫中數據」的方法,是學習其它數據庫的一個重要啓示! 
相關文章
相關標籤/搜索