儲存過程和事務的區別

  想必很多人都不是很瞭解,一起來看看吧。下面是小編給大家整理的,供大家參閱!

  

  儲存過程:是SQL-Server伺服器上一組預先編譯好的T-SQL語句。以一個名稱儲存在資料庫中,作為一個獨立的資料庫物件。

  有以下優點:

  1、執行速度快;

  2、提高工作效率;

  3、規範程式設計;

  4、提高系統安全性。

  事務:一般是指使用者定義的一序列操作,這些操作要麼全做,要麼都不做,是不可分割的一個工作單位.他是一個邏輯工作單元,同時又是一個恢復單元,一個事務提交以後資料庫又處與另一個一致狀態.具體的關於他的操作去找書看吧.

  事務中可以有儲存過程

  儲存過程中也可以有事務

  事務是一系列的對資料庫的操作,這些操作包括儲存過程,更改語句及其它操作。開始語句是BEGIN TRANSACTION ***事務開始***,結束語句有兩種,一個是ROLLBACK--回滾,一個是--commit提交事務的所有操作。

  儲存過程是實現一定功能的語句組成的程式段。可以包括事務,也可以在某事務當中。

  這是一個包括一個事務處理過程的儲存過程,並且在事務中也包括另一個儲存過程的操作:

  CREATTE PROCEDURE MYPROCEDURE

  AS

  BEGIN TRANSACTION--開始一個事務

  UPDATE TABLENAME SET ABC='DEF' WHERE ......--操作

  EXEC OTHERPROCEDURE '引數' --事務中包括的儲存過程

  IF @@ERROR>0--操作如果失敗

  BEGIN

  ROLLBACK TRANSACTION--回滾

  RAISERROR***'更改資料失敗!',16,1***--向前臺報錯

  RETURN--返回,不再繼續執行

  END

  ELSE

  COMMIT TRANSACTION--操作成功,確認所作修改

  GO

  儲存過程的優勢

  ***1*** 能實現模組化程式設計。儲存過程是根據實際功能的需要建立的一個程式模組,並被儲存在資料庫中。以後使用者要完成該功能,只要在程式中直接呼叫該儲存過程即可,而無需再編寫重複的程式程式碼。儲存過程可由資料庫程式設計方面的專門人員建立,並可獨立於程式原始碼而進行修改和擴充套件。

  ***2*** 使用儲存過程可以提高執行效率。當客戶程式需要訪問伺服器上的資料時,一般要經過5個步驟:

  ● 查詢語句被髮送到伺服器;

  ● 伺服器編譯T-SQL語句;

  ● 優化產生查詢執行計劃;

  ● 資料庫引擎執行查詢;

  ● 執行結果發回客戶程式。

  如果執行儲存在客戶端本地的T-SQL程式,那麼每次執行該程式時,對於程式中的每一條語句都要經過以上5個步驟。而儲存過程在建立時就被編譯和優化,當儲存過程第一次被執行時,SQL Server為其產生查詢計劃並將其儲存在記憶體中,這樣以後在呼叫該儲存過程時就不必再進行編譯,即以上5個步驟中的第2步和第3步就被省略了,這能大大改善系統的效能。

  ***3*** 減少網路流量。一個需要數百行T-SQL程式碼的操作,如果將其建立成儲存過程,那麼使用一條呼叫儲存過程的語句就可完成該操作。這樣就可避免在網路上傳送數百行程式碼,從而減少了網路負荷。

  ***4*** 可作為安全機制使用。管理員可以不授予使用者訪問儲存過程中涉及的表的許可權,而只授予執行儲存過程的許可權。這樣,既可以保證使用者通過儲存過程操縱資料庫中的資料,又可以保證使用者不能直接訪問儲存過程中涉及的表。使用者通過儲存過程來訪問表,所能進行的操作是有限制的,從而保證了表中資料的安全性。

  儲存過程的型別

  ***1*** 系統儲存過程

  在SQL Server中的許多管理工作是通過執行系統儲存過程來完成的。系統儲存過程建立和儲存在master資料庫中,都以sp_為名稱的字首。系統儲存過程是SQL Server系統自帶的,具有執行系統儲存過程許可權的使用者,可在master資料庫之外直接呼叫。一般情況下,系統儲存過程執行成功返回0值,若有錯誤發生返回非0值。

  ***2*** 擴充套件儲存過程

  擴充套件儲存過程是以動態連結庫***dll***形式存在的外部程式。SQL Server自身帶了大量的擴充套件儲存過程安裝在master資料庫中,擴充套件儲存過程與普通儲存過程執行方法相同。

  若擴充套件儲存過程的字首為sp_,則該擴充套件儲存過程在master資料庫之外也可直接呼叫;否則,必須在擴充套件儲存過程前面加上“master.dbo.”字首。開發人員可以使用其他程式語言來建立擴充套件儲存過程,編寫好擴充套件儲存過程後,可由sysadmin伺服器角色的成員在 SQL Server 中註冊該擴充套件儲存過程,然後授予其他使用者執行該過程的許可權。擴充套件儲存過程只能新增到 master 資料庫中,利用擴充套件儲存過程可以擴充套件SQL Server的功能。

  ***3*** 使用者儲存過程

  使用者儲存過程是由使用者根據實際問題的需要所建立的儲存過程。固定伺服器角色sysadmin 的成員可根據實際需要在master資料庫中建立使用者儲存過程,若使用sp_做儲存過程的字首,則該儲存過程在任何位置均可直接呼叫,否則,必須在該儲存過程前面加上“master.dbo.”字首。對於在使用者資料庫中建立的儲存過程,最好不要使用sp_作為其名稱的字首,否則如果該儲存過程與系統儲存過程同名,則該儲存過程永遠不會被執行。並且若在該使用者資料庫之外呼叫該儲存過程,也必須在儲存過程名的前面加上“使用者資料庫名.所有者名.”字首才能找著、執行該儲存過程。