存儲過程 存儲過程

存儲過程

 

什麼是存儲過程呢?
存儲過程就是做爲可執行對象存放在數據庫中的一個或多個SQL命令。 
通俗來說:存儲過程其實就是能完成必定操做的一組SQL語句。html

那爲何要用存儲過程呢?
1.存儲過程只在創造時進行編譯,之後每次執行存儲過程都不需再從新編譯,而通常SQL語句每執行一次就編譯一次,因此使用存儲過程可提升數據庫執行速度。
2.當對數據庫進行復雜操做時,可將此複雜操做用存儲過程封裝起來與數據庫提供的事務處理結合一塊兒使用。
3.存儲過程能夠重複使用,可減小數據庫開發人員的工做量。
4.安全性高,可設定只有某些用戶才具備對指定存儲過程的使用權數據庫

那存儲過程怎麼用呢?
如下經過表Student 來了解存儲過程,由於是要了解存儲過程的簡單用法,因此全部例子均很簡單。
安全

無參數存儲過程:
選出Student表中的全部信息,app

複製代碼
create proc StuProc
as //此處 as 不能夠省略不寫
begin //begin 和 end 是一對,不能夠只寫其中一個,但能夠都不寫
select S#,Sname,Sage,Ssex from student
end
go
複製代碼

有參數存儲過程:
全局變量
全局變量也稱爲外部變量,是在函數的外部定義的,它的做用域爲從變量定義處開始,到本程序文件的末尾。
選出指定姓名的學生信息:函數

複製代碼
複製代碼
create proc StuProc
@sname varchar(100) 
as 
begin
select S#,Sname,Sage,Ssex from student where sname=@sname
end
go

exec StuProc '趙雷' //執行語句
複製代碼
複製代碼

上面是在外部給變量賦值,也能夠在內部直接給變量設置默認值post

複製代碼
複製代碼
create proc StuProc
@sname varchar(100)='趙雷'
as 
begin
select S#,Sname,Sage,Ssex from student where sname=@sname
end
go

exec StuProc
複製代碼
複製代碼

也能夠把變量的內容輸出,使用outputurl

複製代碼
複製代碼
create proc StuProc
@sname varchar(100),
@IsRight int output //傳出參數
as 
if exists (select S#,Sname,Sage,Ssex from student where sname=@sname)
set @IsRight =1
else
set @IsRight=0
go

declare @IsRight int 
exec StuProc '趙雷' , @IsRight output
select @IsRight
複製代碼
複製代碼

以上是全局變量,下面來了解局部變量
局部變量也稱爲內部變量。局部變量是在函數內做定義說明的。其做用域僅限於函數內部,離開該函數後再使用這種變量是非法的。
局部變量的定義:必須先用Declare命令定之後纔可使用,declare{@變量名 數據類型}
局部變量的賦值方法:set{@變量名=表達式}或者select{@變量名=表達式}
局部變量的顯示:select @變量名spa

複製代碼
複製代碼
create proc StuProc
as 
declare @sname varchar(100)
set @sname='趙雷'
select S#,Sname,Sage,Ssex from student where sname=@sname
go

exec StuProc
複製代碼
複製代碼

那若是是要把局部變量的數據顯示出來怎麼辦呢?code

複製代碼
複製代碼
create proc StuProc
as 
declare @sname varchar(100)
set @sname=(select Sname from student where S#=01)
select @sname
go

exec StuProc
 
 
 

帶輸出參數存儲過程htm

if (object_id('proc_getStudentRecord', 'P') is not null)    drop proc proc_getStudentRecordgocreate proc proc_getStudentRecord(    @id int, --默認輸入參數    @name varchar(20) out, --輸出參數    @age varchar(20) output--輸入輸出參數)as    select @name = name, @age = age  from student where id = @id and sex = @age;go