--- title: "18-存储过程" created: 2025-11-25 tags: - 项目筑基 --- # 存储过程 一段在服务器上执行的程序 把过程定义成程序保存到服务器中 以便经常使用 分为系统存储过程和用户自定义存储过程 ## 系统存储过程 sp\_ 开头 ## 自定义存储过程 ### 无参数的存储过程 主要用于完成一类操作,它不需要输入参数。 执行时只有一种结果。 ```sql CREATE PROCEDURE 存储过程1 AS SELECT 课程名称 FROM 课程 inner join 选课成绩 ON 选课成绩.课程编号=课程.课程编号 inner join 学生 ON 选课成绩.学号=学生.学号 WHERE 姓名='张天' exec 存储过程1 ``` ### 有输入参数无输出参数的存储过程 在执行时需要提供和存储过程定义时类型/顺序和个数相同的实际参数 根据提供的参数值不同,运行结果不同。 ```sql CREATE PROCEDURE 存储过程2 @name char(20) AS SELECT 课程名称 FROM 课程 inner join 选课成绩 ON 选课成绩.课程编号=课程.课程编号 inner join 学生 ON 选课成绩.学号=学生.学号 WHERE 学生.姓名=@name exec 存储过程2 '张三' ``` ### 有输入参数和输出参数的存储过程 ```sql CREATE PROCEDURE 存储过程3 @name char(20),@num int OUTPUT AS set @num=(SELECT count(*) FROM 选课成绩 WHERE 学号=(SELECT 学号 FROM 学生 WHERE 姓名=@name)) declare @num int exec 存储过程3 '胡丽丽',@num output select @num as 吴美兰选修课程数 ``` ### 无输入参数有输出参数的存储过程 ? ### 用法: 指定列更新数据 ```sql create procedure 存储过程5 @name char(10),@xingbie char(2) as update 学生 set 性别=@xingbie where 姓名=(select 姓名 from 学生 where 姓名=@name) EXEC 存储过程5 '李四','女' ``` ## 删除存储过程 DROP PROCEDURE 存储过程1,存储过程2,存储过程3 DROP proc 存储过程4 可略写成proc --- ⬅️ [[17-T-SQL程序设计|17-T-SQL程序设计]] 🏠 [[00-数据库|00-数据库]] ➡️ [[19-事务与并发|19-事务与并发]]