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數據庫靈魂的三個重要方面。另外,它們 “高效處理數據庫中數據”的方法,是學習其它數據庫的一個重要啓示! 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章