SqlServer學習之存儲過程


前言:對於存儲過程一直有一種抵觸的心理,因為畢業至今所在的公司開發組都不是很規范,對於開發的一些注意事項並沒有很多的規定,只是在知乎上查找相關知識的時候,看到很多人對於在程序里使用存儲過程的不好之處都有很多介紹,碧如邏輯不清晰,調試難等,在項目中也不需要些存儲過程,所以我也沒有認真學習過相關知識,但是最近准備面試,發現還是有很多公司對於存儲過程是有要求的,今天寫點東西記錄一下自己的學習過程,其實也就是對別人的博客進行一個自己的匯總。

 

什么是存儲過程?

  根據百度百科的解釋,存儲過程是在大型關系型數據庫中,一組完成特定功能的Sql語句集,在數據庫中,經過一次編譯之后調用不需要再次編譯,用戶通過指定存儲過程的名稱並給出參數(如果有的話)來執行它。

 

存儲過程的優點?

  1、響應時間上有優勢,普通sql,程序需要驗證語句是否正確,以及編譯優化,如果有很多業務邏輯需要進行處理,可能會多次鏈接數據庫,但是使用存儲過程的話,就只需要一次(預編譯之后會被存儲到高速緩存里),而且運算過程中不需要把數據取出數據庫,數據庫的IO通道效率很差,大量數據取出來很浪費時間;

  2、對於系統的穩定性有幫助,程序可能會出BUG導致系統不穩定,而存儲過程則只要數據庫不出現問題,基本上不會出現問題;

  3、減少了網絡流量,只需要傳輸存儲過程的名稱和參數即可,從而降低了傳輸量;

  4、增強系統安全性,參數化的存儲過程可以防止SQL注入,只授權部分用戶修改存儲過程的權限;

  5、可可重復使用,使得服務器端開發和數據庫開發同時進行,加快開發速度;

  6、發布程序方便快捷,如果使用常規的sql語句來處理業務邏輯,業務修改,需要重新編譯,然后停止程序進行發布;但是如果業務邏輯寫在存儲過程中,只需要修改存儲過程即可,提高了程序的可移植性。

不過現在有些框架支持把Sql寫到配置文件里面,只需要修改配置文件就可以修改業務。

 

存儲過程的缺點?

  1、移植困難,不同類型的數據庫存儲過程語言差距巨大,基本上無法直接移植;

  2、存儲過程本身運算性能很差,而且無法進行封裝,不符合OOP的思想;

  3、對於開發和維護的的成本較高。

 

存過過程的寫法

無參無輸出的存儲過程:

Create procedure 存儲過程名
as
SQL語句

帶參無輸出的存儲過程:

Create procedure 存儲過程名
@參數  參數類型
as
SQL語句

帶參帶輸出的存儲過程:

Create procedure 存儲過程名
@參數  參數類型
@返回值 返回類型 output
as
SQL語句
CREATE  procedure  proc_Test
@orderNum int,
@flag bit OUTPUT
as
if exists(
select * from SaleOrder where OrderNumber = @orderNum)
select @flag=1
else
select @flag=0


//執行
DECLARE @re int 

EXEC proc_Test 10,@re output

SELECT @re as '返回值'

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM