存儲過程的概念
存儲過程PRocedure是一組為了完成特定功能的SQL語句集合,經編譯后存儲在數據庫中,用戶通過指定存儲過程的名稱并給出參數來執行。
存儲過程中可以包含邏輯控制語句和數據操縱語句,它可以接受參數、輸出參數、返回單個或多個結果集以及返回值。
由于存儲過程在創建時即在數據庫服務器上進行了編譯并存儲在數據庫中,所以存儲過程運行要比單個的SQL語句塊要快。同時由于在調用時只需用提供存儲過程名和必要的參數信息,所以在一定程度上也可以減少網絡流量、簡單網絡負擔。
--===========系統存儲過程==============--顯示系統數據庫exec sp_databases--顯示數據庫詳細信息exec sp_helpdb--給指定的數據庫更換名稱exec sp_renamedb 'aa','bb'--查看指定表名的詳細信息exec sp_help student--查看指定索引、視圖、存儲過程等的創建文本信息exec sp_helptext sp_help--調用存儲過程必須在批處理文件第一位if exists(select * from sysobjects where name = 'Table1') drop table Table1go sp_help sp_help--==========系統擴展存儲過程================use mastergo--創建文件夾bankexec xp_cmdshell 'mkdir D:/bank',no_output if exists(select * from sysdatabases where name = 'bankDB') drop database bankDB go create database bankDB on primary ( name = 'bankDB', filename = 'D:/bank/bankDB.mdf', size = 5MB, maxsize = 10MB, filegrowth = 15% )log on( name = 'bankDB_log', filename = 'D:/bank/bankDB_log.ldf', size = 5MB, filegrowth = 15% ) --調用儲存過程查看文件夾信息exec xp_cmdshell 'dir D:/bank/'--========創建存儲過程,查詢java Logic最近一次考試平均分以及未通過考試的學員名單=========use MySchoolgoif exists(select * from sysobjects where name = 'sp_getavgresult')drop proc sp_getavgresultgo--創建存儲過程實現create proc sp_getavgresult @returnnum int output, --返回未及格的人數 @returnsum int output, --參加考試總人數 @subjectName varchar(30), --添加科目 @score int = 60 --添加輸入參數(及格分數)asdeclare @subjectId intdeclare @maxdate datedeclare @avg int--查詢java logic課程的編號select @subjectId = SubjectId from Subject where SubjectName = @subjectName--查詢java logic課程最近一次考試時間select @maxdate = MAX(ExamDate) from Result where SubjectId = @subjectId--查詢java logic課程最近一次考試的平均分select @avg = AVG(StudentResult) from Result where SubjectId = @subjectId and ExamDate = @maxdateprint '未通過考試的人員名單:======================='--查詢java logic課程最近一次考試未通過的學生名單select studentName,studentResult from student s inner join Result r on r.StudentNo = s.StudentNo where SubjectId = @subjectId and ExamDate = @maxdate and StudentResult < @score --查詢參加考試的總人數select @returnsum = COUNT(*) from Result where ExamDate = @maxdate and SubjectId = @subjectId--查詢未及格的人數 select @returnnum = COUNT(*) from Result where ExamDate = @maxdate and SubjectId = @subjectId and StudentResult < @score if(@avg > 70)begin print '考試結果:優秀'endelsebegin print '考試結果:較差'endgo--=======調用儲存過程實現業務邏輯===========----declare @sum int --參加考試總人數declare @num int --未及格人數declare @percent float(2) --及格百分比--調用存儲過程exec sp_getavgresult @num output,@sum output,@subjectName = 'java logic',@score = 60print '========================================='print '參加考試人數為:' + convert(varchar(30),@sum)print '未及格人數為:' + convert(varchar(30),@num)--計算及格率set @percent = convert(float(2),(@sum - @num))/@sum * 100print '及格百分比:' + convert(varchar(30),@percent) +'%'--判斷是否要調及格分數線if(@percent > 50)begin print '不需要調分數線。。。'endelsebegin print '需要降低分數線。。。'end
新聞熱點
疑難解答