舉個例子: 帶輸入參數的存儲過程計算班級中英語和數學不及格的人數 if(exists(select * from sys.objects where name='usp_GetFailCount')) drop proc usp_GetFailCount go create proc usp_Get ...
舉個例子:
帶輸入參數的存儲過程
計算班級中英語和數學不及格的人數
if(exists(select * from sys.objects where name='usp_GetFailCount'))
drop proc usp_GetFailCount
go
create proc usp_GetFailCount--開始創建存儲過程
@EngPass int,--存儲過程的參數不需要加declare
@MathPass int
as
聲明變數存儲英語成績不及格和數學成績不及格的人數
declare @engCount int
declare @mathCount int
--給人數賦值
select @engCount=Count(*) from Score where english<@EngPass
select @mathCount=Count(*) from Score where math<@MathPass
--輸出結果
select '英語不及格的人數',@engCount
select '數學不及格的人數',@mathCount
執行存儲過程
exec usp_GetFailCount
--傳入兩個需要的參數
exec usp_GetFailCount 80,60
--想讓英語和數學的及格分數線都是60
exec usp_GetFailCount @EngPass=60,@MathPass=60
總結:
存儲過程如果沒有預設的參數
傳參的方式
1.直接傳入跟參數類型一樣的值
2.@參數名=值,個數必須跟參數要求的一致
存儲過程如果有預設的參數
1.不傳,採用的預設值
2.傳1個,另一個就是預設值
3.傳2個,會把預設值覆蓋
帶輸出參數的存儲過程
if(exists(select * from sys.objects where name='usp_GetEngFailCount'))
drop proc usp_GetEngFailCount
go
create proc usp_GetEngFailCount
@EngPass int,--輸入參數
@MathPass int,
將數學成績不及格的人數 使用輸出參數返回
@MathFailCount int output--輸出參數
as
先求英語不及格的人數
declare @EngFailCount int
select @EngFailCount=Count(*) from Score where english<@EngPass
select @MathFailCount=Count(*) from Score where math<@MathPass
-只列印英語不及格的人數
select '英語不及格的人數',@EngFailCount
Declare @mCount int
--調用
exec usp_GetEngFailCount 60,60,@mCount output
輸出數學不及格的人數
select '數學不及格的人數',@mCount