1. 程式人生 > >SQLServer之儲存過程簡介

SQLServer之儲存過程簡介

儲存過程定義

儲存的過程 (儲存過程(資料庫引擎)) 是儲存在資料庫中的可執行物件。

儲存過程分類

系統儲存過程

  系統儲存過程是 SQL Server系統自身提供的儲存過程,可以作為命令執行各種操作。

  系統儲存過程主要用來從系統表中獲取資訊,使用系統儲存過程完成資料庫伺服器的管理工作,為系統管理員提供幫助,為使用者檢視資料庫物件提供方便,系統儲存過程位於資料庫伺服器中,並且以sp_開頭,系統儲存過程定義在系統定義和使用者定義的資料庫中,在呼叫時不必在儲存過程前加資料庫限定名。SQL SERVER伺服器中許多的管理工作都是通過執行系統儲存過程來完成的,許多系統資訊也可以通過執行系統儲存過程來獲得。

  系統儲存過程建立並存放在與系統資料庫master中,一些系統儲存過程只能由系統管理員使用,而有些系統儲存過程通過授權可以被其它使用者所使用。

使用者儲存過程(自定義儲存過程)

  自定義儲存過程即使用者使用T_SQL語句編寫的、為了實現某一特定業務需求,在使用者資料庫中編寫的T_SQL語句集合,自定義儲存過程可以接受輸入引數、向客戶端返回結果和資訊,返回輸出引數等。建立自定義儲存過程時,儲存過程名前加上"##"表示建立了一個全域性的臨時儲存過程;儲存過程前面加上"#"時,表示建立的區域性臨時儲存過程。區域性臨時儲存過程只能在建立它的回話中使用,會話結束時,將被刪除。這兩種儲存過程都儲存在tempdb資料庫中。

使用者定義的儲存過程分為兩類:T_SQL 和CLR

T_SQL:儲存過程是值儲存的T_SQL語句集合,可以接受和返回使用者提供的引數,儲存過程也可能從資料庫向客戶端應用程式返回資料。

CLR儲存過程是指引用Microsoft.NET Framework公共語言的方法儲存過程,可以接受和返回使用者提供的引數,它們在.NET Framework程式集是作為類的公共靜態方法實現的。

擴充套件儲存過程

擴充套件儲存過程是以在SQL SERVER環境外執行的動態連線(DLL檔案)來實現的,可以載入到SQL SERVER例項執行的地址空間中執行,擴充套件儲存過程可以用SQL SERVER擴充套件儲存過程API程式設計,擴充套件儲存過程以字首"xp_"來標識,對於使用者來說,擴充套件儲存過程和普通話儲存過程一樣,可以用相同的方法來執行。 

儲存過程建立

儲存過程可以有零個或多個引數。

你可以使用儲存的過程呼叫從外部例程 Microsoft SQL Server Analysis Services。

你可以在任何公共語言執行時 (CLR) 語言(例如 C、C++、C#、Visual Basic 或 Visual Basic .NET)中編寫由儲存過程呼叫的外部例程。

儲存過程可以一次建立並從許多上下文中進行呼叫,例如其他儲存過程、計算度量值或客戶端應用程式。 

程式集通過使通用程式碼可以一次開發並存儲在單個位置中,簡化Analysis Services 資料庫開發和實現。 

儲存過程可用來嚮應用程式中新增 MDX 的本機功能未提供的商業功能。

儲存過程輸入

通過指定過程引數,呼叫程式可以將值傳遞給過程的主體。 

在執行過程期間,這些值可以用於各種目的。 

如果將引數標記為 OUTPUT 引數,則過程引數還可以將值返回給呼叫程式。

一個過程最多可以有 2100 個引數,每個引數都有名稱、資料型別和方向。 還可以為引數指定預設值(可選)。

儲存過程呼叫

可以在伺服器上或從客戶端應用程式中呼叫儲存過程。 

在任何一種情況下,儲存過程都始終運行於伺服器上,或者使用伺服器的上下文,或者使用資料庫的上下文。 

執行儲存過程時,不需要具備特殊的許可權。 

儲存過程由程式集新增到伺服器或資料庫上下文後,只要使用者的角色允許執行儲存過程所執行的操作,則任何使用者均可執行該儲存過程。

儲存過程輸出

過程中的每一條 SELECT 語句都生成一個結果集。

過程可以通過輸出引數返回資料。

過程可以具有整數返回程式碼。

儲存過程優點

1、提高效能。

2、降低網路開銷。

3、提供更好的一致性。

4、提高準確性。

5、增加功能。

儲存過程缺點

1、資料庫移植不方便,儲存過程依賴與資料庫管理系統, SQL Server 儲存過程中封裝的操作程式碼不能直接移植到其他的資料庫管理系統中。

2、不支援面向物件的設計,無法採用面向物件的方式將邏輯業務進行封裝,甚至形成通用的可支援服務的業務邏輯框架。

3、程式碼可讀性差,不易維護。不支援叢集。

4、不便於除錯。