在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 數(shù)據(jù)庫/ SQL Server存儲過程
SQL Server存儲過程
SQL Server教程
SQL Server查詢設計器
SQL Server添加數(shù)據(jù)
SQL Server鏈接服務器
SQL Server創(chuàng)建表
SQL Server數(shù)據(jù)庫模式
SQL Server安裝
SQL Server創(chuàng)建數(shù)據(jù)庫
SQL Server 2014版
關(guān)于Microsoft SQL Server
SQL Server服務器角色
SQL Server視圖
SQL Server SQL腳本
Windows2012 R2上安裝.NET3.5框架
SQL Server管理套件(SSMS)

SQL Server存儲過程

在SQL Server中,存儲過程是比視圖更強大。視圖讓我們簡單地做一個SELECT查詢也在可視圖本身,它的工作方式是用于運行復雜的查詢。 但視圖并不姝真正為我們提供代碼業(yè)務邏輯的能力。例如,視圖不會能讓我們增加條件代碼(如IF語句)。幸運的是存儲過程可能使用。

什么是存儲過程?

存儲過程是一組SQL語句編譯成一個SQL。類似于在說的SQL腳本頁面,在這里可以運行許多SQL腳本合為一個整體。

然而,存儲過程并不僅僅是一個長腳本。這是已保存在SQL Server中明確在存儲過程節(jié)點的腳本。存儲過程通常包含一些業(yè)務邏輯。 例如,一個存儲過程可以接受被傳遞給它的并針對這些參數(shù)測試使用IF語句的參數(shù)。例如,如果該參數(shù)是一個值,這樣做,如果它是另一個值。

它們包含業(yè)務邏輯的能力使存儲過程SQL Server的強大的一部分。存儲過程可以提高性能的應用程序,因為存儲過程進行解析,并盡快,因為它是建立優(yōu)化,然后存儲在內(nèi)存中。運行通過存儲過程條件的查詢可以是非???- 相比,發(fā)送查詢通過網(wǎng)絡,到SQL Server的應用程序,遂將全部返還給它在網(wǎng)絡上,因此它可以過濾通過它,并挑選出只是它感興趣的記錄數(shù)據(jù)。

存儲過程的好處

下面是一些在使用存儲過程的主要優(yōu)點:

好處 說明
模塊化編程 可以寫一個存儲過程一次,然后一次又一次地調(diào)用它,從應用程序的不同部分(甚至多個應用程序)。
性能 存儲過程提供更快的代碼執(zhí)行和減少網(wǎng)絡流量。
  • 更快的執(zhí)行:存儲過程進行解析,并為他們創(chuàng)造盡快優(yōu)化和存儲過程是存儲在內(nèi)存中。這意味著它會執(zhí)行比從應用程序到SQL Server發(fā)送SQL多行代碼快了很多。這樣做需要SQL Server來編譯和每次運行時優(yōu)化改進你的SQL代碼。
  • 減少網(wǎng)絡流量:如果通過網(wǎng)絡發(fā)送的SQL多行代碼到你的SQL Server中,這會影響網(wǎng)絡性能。如果你有數(shù)以百計的SQL代碼行和/或你有很多活動在應用程序,這是尤其如此。運行SQL Server上的代碼(作為存儲過程中)消除了需要發(fā)送此代碼在網(wǎng)絡上。唯一的網(wǎng)絡通信將提供的參數(shù)和任何查詢的結(jié)果。
安全 用戶無需執(zhí)行任何直接的語句可以執(zhí)行存儲過程。因此,存儲過程可以誰也不能正常訪問這些任務的用戶提供先進的數(shù)據(jù)庫功能,但這種功能是在嚴格控制的方式提供。

創(chuàng)建一個存儲過程

要創(chuàng)建一個存儲過程,需要使用CREATE PROCEDURE語句,其次是彌補了存儲過程的代碼。如果存儲過程將要接受參數(shù),它們需要被包括在名稱后。

?
CREATE PROCEDURE myStoredProcedure AS
...

OR

CREATE PROCEDURE myStoredProcedure @{Parameter Name} {data type} AS
...

示例

下面的代碼創(chuàng)建一個存儲過程被稱為“LatestTasks”。它接受一個參數(shù)名為 @Count. 當調(diào)用這個存儲過程,通過@count參數(shù),它決定你想要多少行返回。下面的代碼:

?
CREATE PROCEDURE LatestTasks @Count int AS
SET ROWCOUNT @Count
SELECT TaskName AS LatestTasks, DateCreated
FROM Tasks
ORDER BY DateCreated DESC

運行這段代碼在SQL Server管理套件,會看到它被在存儲過程節(jié)點創(chuàng)建為“LatestTasks”。

Screenshot of stored procedure in the Object Explorer

在SQL Server2014,可以在存儲過程節(jié)點/文件夾中創(chuàng)建通過右鍵單擊一個存儲過程,選擇存儲過程....這將打開一個模板,這是隨時可以填入自己的具體程序。

執(zhí)行存儲過程

現(xiàn)在,已經(jīng)創(chuàng)建了存儲過程,要執(zhí)行它的任何時間,需要使用調(diào)用它要么執(zhí)行或EXEC。如果存儲過程的參數(shù)要求提供這些程序名在后面。像這樣:

?
EXECUTE LatestTasks 
EXEC LatestTasks

EXEC LatestTasks @Count = 5

示例

在下面的例子中,我們在同一時間執(zhí)行存儲過程兩次。我們第一次調(diào)用它,我們通過@Count傳遞為3,第二次傳遞的值為5。

該截圖顯示,通過傳遞參數(shù)(和值),存儲過程返回結(jié)果的基礎上提供值。頂端結(jié)果集返回3行,因為我們通過值3。第二個結(jié)果集返回5行,因為我們提供一個值5:

Screenshot of stored procedure being executed

使用GUI

還可以使用圖形用戶界面來執(zhí)行存儲過程。

具體方法如下:

  1. 使用對象資源管理器,瀏覽到存儲過程
  2. 右鍵單擊該存儲過程并選擇 Execute Stored Procedure...:
    Initiating the execution of a stored procedure
  3. 會出現(xiàn)一個對話框。輸入您所選擇的參數(shù)值:
    Initiating the execution of a stored procedure
  4. 點擊 OK
  5. SQL Server現(xiàn)在會生成SQL代碼并執(zhí)行存儲過程。

修改存儲過程

如果需要修改現(xiàn)有的存儲過程,只需更換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

系統(tǒng)存儲過程

SQL Server包含了大量的系統(tǒng)存儲過程,以幫助數(shù)據(jù)庫管理任務??梢酝ㄟ^GUI執(zhí)行的任務可以通過系統(tǒng)存儲過程來完成。 例如,有些東西可以用系統(tǒng)存儲過程的包括:

  • 配置安全帳戶
  • 建立鏈接服務器
  • 創(chuàng)建一個數(shù)據(jù)庫維護計劃
  • 創(chuàng)建全文檢索目錄
  • 添加遠程登錄
  • 配置復制
  • 設置調(diào)度作業(yè)
  • 以及更多...

命名約定

擴展系統(tǒng)存儲過程節(jié)點,一起來看看。會發(fā)現(xiàn),他們的名字都開始以sp_,表明它是一個存儲過程。該系統(tǒng)存儲過程顯然遵循的命名約定。

這是一個好主意,制定一個一致的命名約定存儲過程(并為數(shù)據(jù)庫中的所有其他對象)。

有些人前綴的存儲過程usp_,另外其他人使用SQL關(guān)鍵字,如SELECT,INSERT,UPDATE,DELETE。其他人使用的縮寫應用。

一些使用下劃線的存儲過程(例如,latest_tasks)在單獨的單詞,而其他人將使用標題的情況下(例如,LatestTasks)。

因此,這是可能的,我們的存儲過程可以被命名為以下任意一種,這取決于命名約定的使用。

  • LatestTasks
  • latest_tasks
  • uspLatestTasks
  • usp_latest_tasks
  • selectLatestTasks
  • select_LatestTasks
  • select_latest_tasks
  • getLatestTasks
  • get_latest_tasks

最重要的是一致性。選擇一個,并堅持下去。它會更容易,當你需要使用存儲過程。 想象一下,有幾十,甚至上百的存儲程序,每一次執(zhí)行一次,需要找到它在對象資源管理器,是否把它稱為usp_LatestTasks或uspLatestTasks。

所以這是存儲過程覆蓋。接下來,我們了解用戶登錄