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

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

SQL Server存儲(chǔ)過(guò)程

在SQL Server中,存儲(chǔ)過(guò)程是比視圖更強(qiáng)大。視圖讓我們簡(jiǎn)單地做一個(gè)SELECT查詢也在可視圖本身,它的工作方式是用于運(yùn)行復(fù)雜的查詢。 但視圖并不姝真正為我們提供代碼業(yè)務(wù)邏輯的能力。例如,視圖不會(huì)能讓我們?cè)黾訔l件代碼(如IF語(yǔ)句)。幸運(yùn)的是存儲(chǔ)過(guò)程可能使用。

什么是存儲(chǔ)過(guò)程?

存儲(chǔ)過(guò)程是一組SQL語(yǔ)句編譯成一個(gè)SQL。類似于在說(shuō)的SQL腳本頁(yè)面,在這里可以運(yùn)行許多SQL腳本合為一個(gè)整體。

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

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

存儲(chǔ)過(guò)程的好處

下面是一些在使用存儲(chǔ)過(guò)程的主要優(yōu)點(diǎn):

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

創(chuàng)建一個(gè)存儲(chǔ)過(guò)程

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

?
CREATE PROCEDURE myStoredProcedure AS
...

OR

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

示例

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

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

運(yùn)行這段代碼在SQL Server管理套件,會(huì)看到它被在存儲(chǔ)過(guò)程節(jié)點(diǎn)創(chuàng)建為“LatestTasks”。

Screenshot of stored procedure in the Object Explorer

在SQL Server2014,可以在存儲(chǔ)過(guò)程節(jié)點(diǎn)/文件夾中創(chuàng)建通過(guò)右鍵單擊一個(gè)存儲(chǔ)過(guò)程,選擇存儲(chǔ)過(guò)程....這將打開(kāi)一個(gè)模板,這是隨時(shí)可以填入自己的具體程序。

執(zhí)行存儲(chǔ)過(guò)程

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

?
EXECUTE LatestTasks 
EXEC LatestTasks

EXEC LatestTasks @Count = 5

示例

在下面的例子中,我們?cè)谕粫r(shí)間執(zhí)行存儲(chǔ)過(guò)程兩次。我們第一次調(diào)用它,我們通過(guò)@Count傳遞為3,第二次傳遞的值為5。

該截圖顯示,通過(guò)傳遞參數(shù)(和值),存儲(chǔ)過(guò)程返回結(jié)果的基礎(chǔ)上提供值。頂端結(jié)果集返回3行,因?yàn)槲覀兺ㄟ^(guò)值3。第二個(gè)結(jié)果集返回5行,因?yàn)槲覀兲峁┮粋€(gè)值5:

Screenshot of stored procedure being executed

使用GUI

還可以使用圖形用戶界面來(lái)執(zhí)行存儲(chǔ)過(guò)程。

具體方法如下:

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

修改存儲(chǔ)過(guò)程

如果需要修改現(xiàn)有的存儲(chǔ)過(guò)程,只需更換CREATE使用ALTER。 讓我們添加一個(gè)空格之間“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)存儲(chǔ)過(guò)程

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

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

命名約定

擴(kuò)展系統(tǒng)存儲(chǔ)過(guò)程節(jié)點(diǎn),一起來(lái)看看。會(huì)發(fā)現(xiàn),他們的名字都開(kāi)始以sp_,表明它是一個(gè)存儲(chǔ)過(guò)程。該系統(tǒng)存儲(chǔ)過(guò)程顯然遵循的命名約定。

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

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

一些使用下劃線的存儲(chǔ)過(guò)程(例如,latest_tasks)在單獨(dú)的單詞,而其他人將使用標(biāo)題的情況下(例如,LatestTasks)。

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

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

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

所以這是存儲(chǔ)過(guò)程覆蓋。接下來(lái),我們了解用戶登錄。