儲存過程和函式有什麼區別
資料庫中有這樣一類物件叫
儲存過程
,類似於C語言中的函式,封裝的一段程式碼,可以包含各種SQL語句以及前面講到的T-SQL程式設計裡的所有內容。
01
簡述
類似函式的使用,儲存過程也需要
先建立
,
再呼叫
。可以帶引數,也可以沒有引數,還可以帶返回值,其引數又分為
輸入引數和輸出引數
。用法比函式更靈活多樣。
關鍵詞:
儲存過程:
procedure(簡寫:proc)
建立:
create
執行:
execute(簡寫:exec)
返回:
return
輸出引數:
output
錯誤提示:
raiserror
建立儲存過程:
create proc <儲存過程名稱>
呼叫儲存過程:
exec/execute <儲存過程名稱>
儲存過程用來處理複雜的業務邏輯,可以被重複多次呼叫。其特點:
模組化程式設計
,專案分解,某段程式碼只實現一項功能任務,邏輯層次清晰;
執行速度快
,程式碼在伺服器端儲存,客戶端只需要名稱呼叫即可;
減少網路流量
,客戶端和伺服器端傳送的資料流大大減少;
提高安全性
,彌補了SQL語句天然的缺陷(注入式漏洞)。
和函式一樣,儲存過程也分為
系統儲存過程和使用者自定義儲存過程。
前面在使用程式碼建立資料庫時,就使用到了若干系統儲存過程,比如:
sp_configure、xp_cmdshell
等。系統儲存過程由系統定義,存放在master資料庫中,名稱以“sp_”或“xp_”開頭。
圖示中:
sp_databases
系統儲存過程,呼叫該名稱,
可以查詢當前伺服器上所有資料庫的名稱。
而
sp_renamedb
,則
可以修改舊的資料庫名稱為新名稱。
02
一般使用
本篇透過一個簡單的案例,來學習瞭解儲存過程的相關使用過程。首先準備一個學生表,包含學號、姓名、性別、年齡、地址等。其結構如下:
1、不帶引數
首先建立一個不帶任何引數的最簡單的儲存過程。
如下程式碼,透過儲存過程實現簡單的查詢功能。透過這段程式碼,讀者可以學習掌握建立儲存過程的基本語法。
對於複雜的SQL語句,諸如前面文章中講的多表查詢、子查詢等構成的查詢語句,可以被儲存過程封裝;查詢時只需要呼叫儲存過程名稱即可。