SQL Server——爲什麼要使用存儲過程?不使用是什麼樣的?

什麼是存儲過程?

是一組爲了完成特定功能的SQL語句集合,經編譯後存儲在數據庫中

 

語法格式?

創建:

CREATE PROCEDURE [擁有者.]存儲過程名[;程序編號]

[(參數#1,…參數#1024)]

[WITH

{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}]

AS 

sql_statement[...n]

刪除存儲過程

DROP PROCEDURE{procedure}{,...n}

 

爲什麼要使用存儲過程?

提高數據庫執行速度,可能第一次見到這句話的小夥伴們感覺到非常的匪夷所思叭!怎麼就提高了它的執行速度捏,從哪方面可以表現出來呢?既然這裏要說到的是爲什麼要使用存儲過程,也就是說它的優點是什麼。那我們肯定就要對使用和不使用存儲過程兩方面來進行對比才能看出它的優點對吧。

不使用存儲過程是什麼樣的?

我們都知道一句SQL語句從提交到我們最後看到的結果必然要經過這幾步:

                                                    

第一步、提交SQL語句。用戶將編寫好的SQL語句點擊【執行】,提交給服務器。比如:select SId, Sname, Sage, Ssex from Student where Sid=01這樣一條SQL語句

第二步、語法分析。這時服務器就接收到從客戶端發來的請求,服務器肯定要先對發送來的請求進行一個判斷,知道你發來的是個什麼東西吧,我怎麼知道你發來的是好是壞呢?這時就開始進行語法的檢查,檢查發送來的SQL語句的格式是否正確,查看from關鍵字後面跟的是不是表名,select關鍵字後面跟的是不是字段名,書寫是否正確,如果不正確就返回錯誤信息,如果正確就執行下一步

第三步、語義分析。檢查你發送來的SQL語句中的表是否在數據庫中存在,所指定的字段是否在表中存在,如果不存在就返回錯誤信息,如果正確則執行下一步

第四步、服務器執行SQL語句。經過上述的步驟之後,服務器才知道你發送來的東西是什麼, 你想讓我幹什麼。這時服務器就會去相應的表中執行語句,

第五步、返回信息。

光一條普普通通的SQL語句就需要經過以上的這麼多個步驟,那如果是我想要同時查詢很多條數據呢,如果是上萬條數據的話數據庫豈不是得執行上萬次,那效率多低,時間得多長鴨

但沒關係,數據庫給我們提供了一個福利,讓我們幹同樣的事情,但效率卻大大提升!

 

使用存儲過程是什麼樣的?

第一步、創建存儲過程


create proc p_student      --創建名爲p_student的存儲過程
@name varchar(10)          --定義變量
as
	select * from student where Sname=@name         --指定變量值爲Sname字段

這時,當我們編寫好了如上SQL語句之後是不是就要點擊執行,服務器依舊像上述SQL語句一樣執行上面的五個步驟。當編譯成功之後,就存儲在了數據庫中,當想要查詢student表中某個學生的學籍信息時,我們只需調用就能顯示出來,而數據庫不用再重新編譯。編譯一次,執行多次

第二步、調用存儲過程

--調用姓名爲趙雷的學籍信息
exec p_student @name='趙雷'

執行結果:

 

這樣是不是就很方便了?減少了我們等待的時間,提高了查詢的效率呢?

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章