SQL 存儲過程使用


use master;    --切換到master數據庫
go

create database stuDB
go

use stuDB    --選擇當前數據庫
go

CREATE TABLE StuInfo --創建學生信息表
(
    StuNo varchar(12) primary key,
    StuName varchar(20) not null ,
    StuAge int check(StuAge>=0 and StuAge<=120),
    StuSex char(2) check(StuSex='' or StuSex='') default(''),
    StuTel varchar(15),
    StuAddress varchar(50) default ('地址不詳'),
    StuEmail varchar(50),
    birthday date,
    classname varchar(12)
)
go

CREATE TABLE Exam --創建學生成績表
(
    ExamNo int primary key identity(1,1),
    StuNo varchar(12) foreign key references StuInfo(StuNo),
    Written decimal(10,2) check(Written>=0 and Written<=100),
    Lab decimal(10,2) check(Lab>=0 and Lab<=100)
)
go

 

 

 
         

--插入數據
insert into stuinfo (stuno,stuName,birthday,stutel,stuAddress,classname)
values('135809010281','周文學','90-03-17','2222273','湖南衡陽','Y2T116');

 
         

insert into stuinfo (stuno,stuName,birthday,stutel,stuAddress,classname)
values('135507150062','陳輝煌','82-10-10','2222274','江西全南縣','Y2T48');

 
         

insert into stuinfo (stuno,stuName,birthday,stutel,stuAddress,classname)
values('135508080033','曾華軍','86-08-22','2222275','廣東珠海','Y2T49');

 
         

insert into stuinfo (stuno,stuName,birthday,stutel,stuAddress,classname)
values('135512190343','羅燕','83-11-07','22222746','雲南省潞西市','Y2T65');

 
         

insert into stuinfo (stuno,stuName,birthday,stutel,stuAddress,classname)
values('135508150034','黃志偉','87-11-13','22222746','江西會昌縣','Y2T50');

 
         

insert into stuinfo (stuno,stuName,birthday,stutel,stuAddress,classname)
values('135508150045','塗乾文','86-07-22','2228852','廣東珠海','Y2T50');

 
         

insert into stuinfo (stuno,stuName,birthday,stutel,stuAddress,classname)
values('135508150156','唐寧','81-07-01','22222746','廣東珠海','Y2T50');

 
         

insert into stuinfo (stuno,stuName,birthday,stutel,stuAddress,classname)
values('135508260037','貝然','85-06-13','22222746','廣東珠海','Y2T60');

 
         

insert into stuinfo (stuno,stuName,birthday,stutel,stuAddress,classname)
values('135508080198','白生全','86-06-03','8828888','重慶','Y2T49');

 
         

insert into stuinfo (stuno,stuName,birthday,stutel,stuAddress,classname)
values('135409250289','沈永強','81-06-23','22222746','江蘇南通市','Y2T50');

 
         

insert into stuinfo (stuno,stuName,birthday,stutel,stuAddress,classname)
values('217507100106','張鍵','85-07-18','8557378','廣東江門','Y2T50');

 
         

insert into stuinfo (stuno,stuName,birthday,stutel,stuAddress,classname)
values('135509060163','吳家彬','82-09-22','8324282','珠海市斗門區','Y2T52');

 
         

insert into stuinfo (stuno,stuName,birthday,stutel,stuAddress,classname)
values('135509120044','鄒城廷','85-10-15','8218358','廣東珠海','Y2T53');

 
         

insert into stuinfo (stuno,stuName,birthday,stutel,stuAddress,classname)
values('135407060145','婁智欣','85-09-21','8545256','江西峽江','Y2T42');

 
         

insert into stuinfo (stuno,stuName,birthday,stutel,stuAddress,classname)
values('135503040102','陳迪華','00-01-01','5612698','廣東珠海','Y2T42');

 
         

insert into stuinfo (stuno,stuName,birthday,stutel,stuAddress,classname)
values('135503210135','陳福清','80-11-25','22222746','江西於都縣','Y2T42');

 
         

insert into stuinfo (stuno,stuName,birthday,stutel,stuAddress,classname)
values('135512280012','陶正武','83-06-19','22222746','湖南益陽市','Y2T42');

 
         

insert into stuinfo (stuno,stuName,birthday,stutel,stuAddress,classname)
values('135406070146','楊振傑','75-08-10','22222746','珠海','Y2A21');

 
         

insert into stuinfo (stuno,stuName,birthday,stutel,stuAddress,classname)
values('135504180237','魯力','82-03-23','22222746','廣東珠海','Y2T44');

 
         

insert into stuinfo (stuno,stuName,birthday,stutel,stuAddress,classname)
values('135505130263','賀際勇','80-11-06','2628682','湖南常德市','Y2T44');

 
         

insert into stuinfo (stuno,stuName,birthday,stutel,stuAddress,classname)
values('514512260014','劉峰','82-02-06','8385613','湖南衡陽市','Y2T44');

 
         

insert into stuinfo (stuno,stuName,birthday,stutel,stuAddress,classname)
values('135505310242','陳學斌','82-02-03','8358801','廣東珠海','Y2T45');

 
         

insert into stuinfo (stuno,stuName,birthday,stutel,stuAddress,classname)
values('135505310012','鄭銀河','81-08-26','22222746','湖南隆回縣','Y2T47');

 
         

insert into stuinfo (stuno,stuName,birthday,stutel,stuAddress,classname)
values('135507150142','陳卓','86-08-30','2210387','江西省於都縣','Y2T47');

 
         

insert into stuinfo (stuno,stuName,birthday,stutel,stuAddress,classname)
values('135507150193','賈海波','85-04-10','22222747','湖南藍山縣','Y2T47');

 
         

insert into stuinfo (stuno,stuName,birthday,stutel,stuAddress,classname)
values('135509120063','鍾文康','84-05-15','22222749','廣東珠海市','S2T53');

 
         

insert into stuinfo (stuno,stuName,birthday,stutel,stuAddress,classname)
values('135509120073','朱婉婷','83-08-11','22222743','廣東珠海','Y2T53');

 
         

insert into stuinfo (stuno,stuName,birthday,stutel,stuAddress,classname)
values('135510110082','易虎','84-02-28','22222744','四川安岳縣','Y2T56');

 
         

insert into stuinfo (stuno,stuName,birthday,stutel,stuAddress,classname)
values('135510110132','陳挺','84-05-19','22222745','珠海香洲','S2T56');

 
         


--插入成績表
insert into Exam values('135510110132',95,86);
insert into Exam values('135510110082',55,56);
insert into Exam values('135509120073',65,86);
insert into Exam values('135509120063',60,60);
insert into Exam values('135507150193',89,null);
insert into Exam values('135507150142',91,60);
insert into Exam values('514512260014',60,76);
insert into Exam values('135505130263',null,null);
insert into Exam values('135504180237',null,86);
insert into Exam values('135406070146',54,46);
insert into Exam values('135512280012',46,76);
insert into Exam values('135503210135',32,86);
insert into Exam values('135503040102',86,36);

--查詢數據
select * from stuinfo
select * from Exam

 

--創建存儲過程
create proc proc_stuInfo
as 
   select * from StuInfo
go

--調用存儲過程
exec proc_stuInfo
go

--創建存儲過程
create proc Proc_passStu
as
 select stuname,stuage,stusex,stuADDress,written,Lab
from  StuInfo s ,Exam e where s.StuNo=e.StuNo
go

--調用存儲過程
exec Proc_passStu
go
 select stuname,stuage,stusex,stuADDress,written,Lab
from  StuInfo s ,Exam e where s.StuNo=e.StuNo


--創建帶輸入參數的存儲過程
create proc proc_passStu1
@written int,
@Lab int
as
 select stuname,stuage,stusex,stuADDress,written,Lab
from  StuInfo s ,Exam e where s.StuNo=e.StuNo
and written>=@written and Lab>=@Lab
go

--調用帶參存儲過程
exec proc_passStu1 60,60
go

--創建帶輸入參數並賦默認值的存儲過程
create proc proc_passStu2
@written int=60,
@Lab int=60
as
 select stuname,stuage,stusex,stuADDress,written,Lab
from  StuInfo s ,Exam e where s.StuNo=e.StuNo
and written>=@written and Lab>=@Lab
go


--調用存儲過程
exec proc_passStu2
exec proc_passStu2 70,60

--筆試及格線為70,機試默認60
exec proc_passStu2 70

--筆試及格線默認60,機試及格線為70
exec proc_passStu2 default,70
exec proc_passStu2 @lab=70
go


--創建帶輸出參數的存儲過程
create proc proc_passStu3
@passnum int output
as
   select @passNum=count(*) from Exam
    where Written>=60 and Lab>=60
go


declare @num int
exec proc_passStu3 @num output
print '本次及格人數:'+convert(varchar(5),@num)



--創建帶輸入參數並賦默認值及輸出參數的存儲過程
--沒有默認值的參數定義在前面比較好
create proc proc_passStu4
@failnum int output,
@written int=60,
@Lab int=60
as
    declare @writtenavg decimal(5,2),@labavg decimal(5,2)
    select @written=AVG(written) from Exam where written is not null
    select @lab=AVG(Lab) from Exam where Lab is not null
    print '筆試平均分'+ convert(varchar(2),@written)
    print '機試平均分'+ convert(varchar(2),@lab)
    
    print '本班考成績:'+
    case
        when @writtenavg>=70 and @labavg>=70 then '優秀'
        when @writtenavg>=60 and @labavg>=60 then '一般'
        else '較差'
    
    end
    
    print '-------------------------------------------------'
    print '           參加本次考試沒有通過的學員'
    print '-------------------------------------------------'
    
        select s.StuName,e.StuNo,written,lab
        from Exam e,StuInfo s where e.StuNo=s.StuNo
        and (written<@written or lab <@Lab)

    select @failnum =count(*)from Exam
    where written<@written or lab <@Lab
    
go
declare @failnum int
exec  proc_passStu4 @failnum output 
print '本次不及格的人數:'+convert(varchar(5),@failnum)
go



--注意條件要加小括號
select StuName,Written,Lab 
from StuInfo s,Exam e
where s.StuNo = e.StuNo 
and (Written<60 or Lab<60)

--使用join就不用
select StuName,Written,Lab 
from StuInfo s join Exam e
on s.StuNo = e.StuNo
where Written<60 or Lab<60


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM