1. 程式人生 > >儲存過程 儲存過程

儲存過程 儲存過程

儲存過程

 

什麼是儲存過程呢?
儲存過程就是作為可執行物件存放在資料庫中的一個或多個SQL命令。 
通俗來講:儲存過程其實就是能完成一定操作的一組SQL語句。

那為什麼要用儲存過程呢?
1.儲存過程只在創造時進行編譯,以後每次執行儲存過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用儲存過程可提高資料庫執行速度。
2.當對資料庫進行復雜操作時,可將此複雜操作用儲存過程封裝起來與資料庫提供的事務處理結合一起使用。
3.儲存過程可以重複使用,可減少資料庫開發人員的工作量。
4.安全性高,可設定只有某些使用者才具有對指定儲存過程的使用權

那儲存過程怎麼用呢?
以下通過表Student 來了解儲存過程,因為是要了解儲存過程的簡單用法,所以所有例子均很簡單。

無引數儲存過程:
選出Student表中的所有資訊,

複製程式碼 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 [email protected]
end
go

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

上面是在外部給變數賦值,也可以在內部直接給變數設定預設值

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

exec StuProc 複製程式碼 複製程式碼

也可以把變數的內容輸出,使用output

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

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

以上是全域性變數,下面來了解區域性變數
區域性變數也稱為內部變數。區域性變數是在函式內作定義說明的。其作用域僅限於函式內部,離開該函式後再使用這種變數是非法的。
區域性變數的定義:必須先用Declare命令定以後才可以使用,declare{@變數名 資料型別}
區域性變數的賦值方法:set{@變數名=表示式}或者select{@變數名=表示式}
區域性變數的顯示:select @變數名

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

exec StuProc 複製程式碼 複製程式碼

那如果是要把區域性變數的資料顯示出來怎麼辦呢?

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

exec StuProc      

帶輸出引數儲存過程

if (object_id('proc_getStudentRecord', 'P') is not null)
drop proc proc_getStudentRecord
go
create 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

什麼是儲存過程呢?
儲存過程就是作為可執行物件存放在資料庫中的一個或多個SQL命令。 
通俗來講:儲存過程其實就是能完成一定操作的一組SQL語句。

那為什麼要用儲存過程呢?
1.儲存過程只在創造時進行編譯,以後每次執行儲存過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用儲存過程可提高資料庫執行速度。
2.當對資料庫進行復雜操作時,可將此複雜操作用儲存過程封裝起來與資料庫提供的事務處理結合一起使用。
3.儲存過程可以重複使用,可減少資料庫開發人員的工作量。
4.安全性高,可設定只有某些使用者才具有對指定儲存過程的使用權

那儲存過程怎麼用呢?
以下通過表Student 來了解儲存過程,因為是要了解儲存過程的簡單用法,所以所有例子均很簡單。

無引數儲存過程:
選出Student表中的所有資訊,

複製程式碼 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 [email protected]
end
go

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

上面是在外部給變數賦值,也可以在內部直接給變數設定預設值

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

exec StuProc 複製程式碼 複製程式碼

也可以把變數的內容輸出,使用output

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

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

以上是全域性變數,下面來了解區域性變數
區域性變數也稱為內部變數。區域性變數是在函式內作定義說明的。其作用域僅限於函式內部,離開該函式後再使用這種變數是非法的。
區域性變數的定義:必須先用Declare命令定以後才可以使用,declare{@變數名 資料型別}
區域性變數的賦值方法:set{@變數名=表示式}或者select{@變數名=表示式}
區域性變數的顯示:select @變數名

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

exec StuProc 複製程式碼 複製程式碼

那如果是要把區域性變數的資料顯示出來怎麼辦呢?

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

exec StuProc      

帶輸出引數儲存過程

if (object_id('proc_getStudentRecord', 'P') is not null)
drop proc proc_getStudentRecord
go
create 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

什麼是儲存過程呢?
儲存過程就是作為可執行物件存放在資料庫中的一個或多個SQL命令。 
通俗來講:儲存過程其實就是能完成一定操作的一組SQL語句。

那為什麼要用儲存過程呢?
1.儲存過程只在創造時進行編譯,以後每次執行儲存過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用儲存過程可提高資料庫執行速度。
2.當對資料庫進行復雜操作時,可將此複雜操作用儲存過程封裝起來與資料庫提供的事務處理結合一起使用。
3.儲存過程可以重複使用,可減少資料庫開發人員的工作量。
4.安全性高,可設定只有某些使用者才具有對指定儲存過程的使用權

那儲存過程怎麼用呢?
以下通過表Student 來了解儲存過程,因為是要了解儲存過程的簡單用法,所以所有例子均很簡單。

無引數儲存過程:
選出Student表中的所有資訊,

複製程式碼 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 [email protected]
end
go

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

上面是在外部給變數賦值,也可以在內部直接給變數設定預設值

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

exec StuProc 複製程式碼 複製程式碼

也可以把變數的內容輸出,使用output

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

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

以上是全域性變數,下面來了解區域性變數
區域性變數也稱為內部變數。區域性變數是在函式內作定義說明的。其作用域僅限於函式內部,離開該函式後再使用這種變數是非法的。
區域性變數的定義:必須先用Declare命令定以後才可以使用,declare{@變數名 資料型別}
區域性變數的賦值方法:set{@變數名=表示式}或者select{@變數名=表示式}
區域性變數的顯示:select @變數名

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

exec StuProc 複製程式碼 複製程式碼

那如果是要把區域性變數的資料顯示出來怎麼辦呢?

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

exec StuProc      

帶輸出引數儲存過程

if (object_id('proc_getStudentRecord', 'P') is not null)
drop proc proc_getStudentRecord
go
create 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