在SQL Server中,儲存過程是比檢視更強大。檢視讓我們簡單地做一個SELECT查詢也在可檢視本身,它的工作方式是用於執行複雜的查詢。 但檢視並不姝真正為我們提供程式碼業務邏輯的能力。例如,檢視不會能讓我們增加條件程式碼(如IF語句)。幸運的是儲存過程可能使用。
儲存過程是一組SQL語句編譯成一個SQL。類似於在說的SQL指令碼頁面,在這裡可以執行許多SQL指令碼合為一個整體。
然而,儲存過程並不僅僅是一個長指令碼。這是已儲存在SQL Server中明確在儲存過程節點的指令碼。儲存過程通常包含一些業務邏輯。 例如,一個儲存過程可以接受被傳遞給它的並針對這些引數測試使用IF語句的引數。例如,如果該引數是一個值,這樣做,如果它是另一個值。
它們包含業務邏輯的能力使儲存過程SQL Server的強大的一部分。儲存過程可以提高效能的應用程式,因為儲存過程進行解析,並儘快,因為它是建立優化,然後儲存在記憶體中。執行通過儲存過程條件的查詢可以是非常快 - 相比,傳送查詢通過網路,到SQL Server的應用程式,遂將全部返還給它在網路上,因此它可以過濾通過它,並挑選出只是它感興趣的記錄資料。
下面是一些在使用儲存過程的主要優點:
好處 | 說明 |
---|---|
模組化程式設計 | 可以寫一個儲存過程一次,然後一次又一次地呼叫它,從應用程式的不同部分(甚至多個應用程式)。 |
效能 |
儲存過程提供更快的程式碼執行和減少網路流量。
|
安全 | 使用者無需執行任何直接的語句可以執行儲存過程。因此,儲存過程可以誰也不能正常存取這些任務的使用者提供先進的資料庫功能,但這種功能是在嚴格控制的方式提供。 |
要建立一個儲存過程,需要使用CREATE PROCEDURE語句,其次是彌補了儲存過程的程式碼。如果儲存過程將要接受引數,它們需要被包括在名稱後。
CREATE PROCEDURE myStoredProcedure AS ... OR CREATE PROCEDURE myStoredProcedure @{Parameter Name} {data type} AS ...
下面的程式碼建立一個儲存過程被稱為“LatestTasks”。它接受一個引數名為 @Count. 當呼叫這個儲存過程,通過@count引數,它決定你想要多少行返回。下面的程式碼:
CREATE PROCEDURE LatestTasks @Count int AS SET ROWCOUNT @Count SELECT TaskName AS LatestTasks, DateCreated FROM Tasks ORDER BY DateCreated DESC
執行這段程式碼在SQL Server管理套件,會看到它被在儲存過程節點建立為“LatestTasks”。
在SQL Server2014,可以在儲存過程節點/檔案夾中建立通過右鍵單擊一個儲存過程,選擇儲存過程....這將開啟一個模板,這是隨時可以填入自己的具體程式。
現在,已經建立了儲存過程,要執行它的任何時間,需要使用呼叫它要麼執行或EXEC。如果儲存過程的引數要求提供這些程式名在後面。像這樣:
EXECUTE LatestTasks EXEC LatestTasks EXEC LatestTasks @Count = 5
在下面的例子中,我們在同一時間執行儲存過程兩次。我們第一次呼叫它,我們通過@Count傳遞為3,第二次傳遞的值為5。
該截圖顯示,通過傳遞引數(和值),儲存過程返回結果的基礎上提供值。頂端結果集返回3行,因為我們通過值3。第二個結果集返回5行,因為我們提供一個值5:
還可以使用圖形化使用者介面來執行儲存過程。
具體方法如下:
如果需要修改現有的儲存過程,只需更換CREATE使用ALTER。 讓我們新增一個空格之間“Latest”和“Tasks”(即“Latest Tasks”),並新增描述欄位:
ALTER PROCEDURE LatestTasks @Count int AS SET ROWCOUNT @Count SELECT TaskName AS "Latest Tasks", Description, DateCreated FROM Tasks ORDER BY DateCreated DESC
SQL Server包含了大量的系統儲存過程,以幫助資料庫管理任務。可以通過GUI執行的任務可以通過系統儲存過程來完成。 例如,有些東西可以用系統儲存過程的包括:
擴充套件系統儲存過程節點,一起來看看。會發現,他們的名字都開始以sp_,表明它是一個儲存過程。該系統儲存過程顯然遵循的命名約定。
這是一個好主意,制定一個一致的命名約定儲存過程(並為資料庫中的所有其他物件)。
有些人字首的儲存過程usp_,另外其他人使用SQL關鍵字,如SELECT,INSERT,UPDATE,DELETE。其他人使用的縮寫應用。
一些使用下劃線的儲存過程(例如,latest_tasks)在單獨的單詞,而其他人將使用標題的情況下(例如,LatestTasks)。
因此,這是可能的,我們的儲存過程可以被命名為以下任意一種,這取決於命名約定的使用。
最重要的是一致性。選擇一個,並堅持下去。它會更容易,當你需要使用儲存過程。 想象一下,有幾十,甚至上百的儲存程式,每一次執行一次,需要找到它在物件資源管理器,是否把它稱為usp_LatestTasks或uspLatestTasks。
所以這是儲存過程覆蓋。接下來,我們了解使用者登入。