1.储存定义,特点,类型
-
储存过程:
- 就是预先编译和优化并储存于数据库的过程,通常在SQL Server 服务器预先定义并编译成可执行计划,调用它时允许接收参数,返回状态值和参数值,并允许嵌套调用。 特点:
- 增强SQL语言的功能和灵活性,保证数据的安全性和完整性,更快的执行速度。 存储过程的类型:
- 1.系统存储过程(定义在系统数据库master中,前缀:“sp_”)
-
2 .扩展存储过程(使用编程语言创见的dll文件)
3 .CLR存储过程
存储过程在命名时同样采用pascal命名规则,全部大写,以’'UP_表名_操作"的形式命名。
创建储存过程
-
1.使用SSMS创建:
-
再使用的数据库下–>可编程性–>储存过程–>新建储存过程
也可以在此修改,添加,删除;
2.使用T-SQL创建储存过程
-
use StudentManagement go create procedure up_teacher_info --创建储存过程 as select * from Teacher where Teacher_Sex='男' go up_teacher_info 使用储存过程(或exec up_teacher_info ) drop procedure up_teacher_info --删除存储过程 go
3.创建传入参数的储存过程
-
create procedure up_COURSE_INFO --创建传入参数的储存过程 @scname varchar(30) as select Student.Student_No,student_Name,Course_Name, SelectCourse_Score from Student,Course,SelectCourse where Student.Student_No=SelectCourse.SelectCourse_StudentNo and SelectCourse.SelectCourse_CourseNo=Course.Course_No and Course_Name=@scname go exec up_COURSE_INFO @scname='数据库技术'
4.创建传入参数和传出参数的储存过程
-
create procedure up_course_count --创建传入参数和传出参数的储存过程 @scname varchar(30),@ccount int output as select COUNT(*) from SelectCourse,Course where SelectCourse.SelectCourse_CourseNo=Course.Course_No and Course.Course_Name=@scname GO
5.按参传值(提倡)
-
declare @ccount int exec up_course_count @scname='数据库技术',@ccount=@ccount output select '选修数据库技术课程的人数为:',@ccount go --按位传值 declare @ccount in exec up_course_count '数据库技术',@ccount output select '选修数据库技术课程的人数为:',@ccount go
6.查看储存过程
-
exec sp_helptext up_course_info exec sp_help up_course_info exec sp_depends up_course_info exec sp_stored_procedures up_course_info go
7.修改储存过程
-
--可以通过ssms修改,方便 alter procedure up_course_info @sno char(6) as select Student.Student_Name,Student.Student_No,Course.Course_Name, SelectCourse.SelectCourse_Score from Student,SelectCourse,Course where Student.Student_No=SelectCourse.SelectCourse_StudentNo and SelectCourse.SelectCourse_CourseNo=Course.Course_No and Student.Student_No=@sno go exec up_course_info @sno='200702' go
8.删除存储过程
-
drop procedure up_course_info drop procedure up_course_count go
例题:
-
ALTER procedure up_course_info @sno char(6)=null as if @sno is null begin select Student.Student_Name,Student.Student_No,Course.Course_Name, SelectCourse.SelectCourse_Score from Student,SelectCourse,Course where Student.Student_No=SelectCourse.SelectCourse_StudentNo and SelectCourse.SelectCourse_CourseNo=Course.Course_No end else begin select Student.Student_Name,Student.Student_No,Course.Course_Name, SelectCourse.SelectCourse_Score from Student,SelectCourse,Course where Student.Student_No=SelectCourse.SelectCourse_StudentNo and SelectCourse.SelectCourse_CourseNo=Course.Course_No and Student.Student_No=@sno end GO exec up_course_info @sno='200702' exec up_course_info