儲存過程(stored procedure)是一種儲存在資料庫中的批處理,它由一組完成特定功能的sql語句集組成,具有輸入引數,輸出引數以及返回值。
資料庫表
查詢學生表並按姓名排序
go
create
procedure getorderedstudents
asselect * from student order
byname
exec getorderedstudents
這是最簡單的儲存過程,通過create procedure語句建立儲存過程,getorderedstudents為儲存過程名,as之後為儲存過程的主體。exec用來執行儲存過程。
按照姓名查詢學生資訊
go
create
procedure getstudentbyname
@name
varchar(20)
asselect * from student where
name
like @name
exec getstudentbyname 'roy'
在宣告變數的時候,必須以@符號開始,按照變數名稱,資料型別,變數預設值,以及引數的方向來宣告乙個變數。此例中,name為變數名,varchar(20)為變數的資料型別,並未指明引數的預設值,未指明引數為output型別則為輸入引數。由於未指明變數預設值,則預設在呼叫該儲存過程時,輸入引數是必須的,若去掉引數 'roy', 則資料庫會報錯。
按照姓名查詢學生資訊
go
create
procedure getstudent
@name
varchar(20) = null
asselect * from student where
name = @name
exec getstudent 'rose'
此時即使在執行時不新增引數 『rose』, 資料庫也不會報錯。
向學生表插入一條資訊並返回自動生成的id值
go
create
procedure insertstudent
@name
varchar(20),
@id int
output
asinsert
into student(name) values(@name)
set @id = scope_identity()
declare @newid int
exec insertstudent @name = 'lora',@id=@newid output
select @newid
第乙個引數未指定output, 則為輸入引數,第二個引數id資料型別未int, 使用output關鍵字指定該引數為輸出引數,也可簡寫未out.as後為儲存過程主體,在插入資訊後,為輸出引數id賦以自動生成的id值。
在呼叫該儲存過程時,首先宣告乙個變數,在使用exec執行儲存過程時分別為兩個引數賦值,其中為輸出引數賦以生命的變數,並且要明確指明為output.
返回值可以用來返回資料,也可以通過返回值來確認儲存過程執行的成功與失敗。返回值必須為整數。從儲存過程向呼叫**傳遞返回值,使用return語句。
修改學生姓名
go
create
procedure updatestudent
@id int,
@name
varchar(20)
asupdate student set
name = @name
where id=@id
return 1
exec updatestudent 3,'vince'
1. 安全性
通過建立儲存過程可避免使用者訪問資料庫底層。例如可以使使用者只能通過儲存過程來對資料進行修改而不能直接修改資料庫表。
2. 高效性
在第一次執行儲存過程時,儲存過程會被優化,查詢計畫被編譯並儲存在快取中,之後再執行時,如果沒有使用with recompile選項,將會使用快取中的查詢計畫,跳過優化和編譯的動作。
SQL基礎之儲存過程
網上有個比較通俗易懂的理解 儲存過程就是預先定義好的sql語句,然後儲存起來,等你用的時候再把自己所需要的匹配的sql語句用execute 即exec 呼叫就行!使用儲存過程的優勢 1.效能高 一條sql語句可以被多個地方使用,這樣進行複雜的操作時 比如多張表連表查詢 可將那些複雜的操作用儲存過程先...
sql基礎之四 儲存過程
網上有個比較通俗易懂的理解 儲存過程就是預先定義好的 sql語句,然後儲存起來,等你用的時候再把自己所需要的匹配的sql語句用execute 即exec 呼叫就行!使用儲存過程的優勢 1.效能高 一條sql語句可以被多個地方使用,這樣進行複雜的操作時 比如多張表連表查詢 可將那些複雜的操作用儲存過程...
MYSQL 儲存過程1 SQL儲存過程的基礎知識
在深入理解mysq之前,我們先理下一些簡單的問題 q 什麼是儲存過程?stored procedure a 是一段寫好的sql 特別的就是它是存在資料庫的目錄裡。所以外部程式可以直接呼叫資料庫裡面定義好的儲存過程,另外資料庫內部的觸發器 trigger 或者其他儲存過程也可以呼叫它。q 儲存過程有什...