什么是存储过程?

  • 存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。
  • 存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数、输出参数、返回单个或多个结果集以及返回值。
  • 由于存储过程在创建时即在数据库服务器上进行了编译并存储在数据库中,所以存储过程运行要比单个的SQL语句块要快。同时由于在调用时只需用提供存储过程名和必要的参数信息,所以在一定程度上也可以减少网络流量、简单网络负担。

存储过程创建语法

create proc | procedure pro_name
    [{@参数数据类型} [=默认值] [output],
     {@参数数据类型} [=默认值] [output],
     ....
    ]
as
    SQL_statements

操作实例
首先创建两张表

Student表
学习笔记:SqlServer存储过程入门
Course表
学习笔记:SqlServer存储过程入门
其中Course表中的F_StuId为Student表的F_ID是外键关联

增加测试数据,顺便练一下sql语法

DECLARE @i INT, @F_Name VARCHAR(50), @F_Age INT, @F_Sex VARCHAR(2), @F_Hobby VARCHAR(50), @ranNum INT
SET @i = 0 
SET @F_Name = '小明' 
SET @F_Age = 0 
WHILE @i < 100
BEGIN
	SET @ranNum = RAND() * 4	--生成一个0-3的随机数
	IF @ranNum = 0
	BEGIN
		SET @F_Sex = '男'
		SET @F_Hobby = '篮球'
	END
	ELSE IF @ranNum = 1
	BEGIN
		SET @F_Sex = '男'
		SET @F_Hobby = '足球'
	END
	ELSE IF @ranNum = 2
	BEGIN
		SET @F_Sex = '女'
		SET @F_Hobby = '刺绣'
	END
	ELSE
	BEGIN
		SET @F_Sex = '女'
		SET @F_Hobby = '跳绳'
	END
	INSERT INTO Student (F_Name, F_Age, F_Sex, F_Hobby) VALUES (@F_Name + CONVERT(VARCHAR(3), @i), @F_Age + @i, @F_Sex, @F_Hobby)
	SET @i = @i + 1
END
GO
DECLARE @i INT, @F_StuId INT, @F_Course VARCHAR(50), @F_Score INT, @ranNum INT
SET @i = 0
SET @F_StuId = 0
SET @F_Course = '语文'
SET @F_Score = 0
WHILE @i < 100
BEGIN
	SET @ranNum = RAND() * 3	
	IF @ranNum = 0
	BEGIN
		SET @F_Course = '语文'
	END
	ELSE IF @ranNum = 1
	BEGIN
		SET @F_Course = '数学'
	END
	ELSE
	BEGIN
		SET @F_Course = '英语'
	END
	INSERT INTO Course (F_StuId, F_Course, F_Score) VALUES (@F_StuId + @i, @F_Course, @F_Score + @i)
	SET @i = @i + 1
END

之后我们根据存储过程的语法创建一个无参的存储过程

create proc proc_get_student
as
select * from Student

创建好以后我们可以在可编程性中找到我们新建的存储过程
学习笔记:SqlServer存储过程入门
然后执行这个存储过程

exec proc_get_student

执行结果
学习笔记:SqlServer存储过程入门
接下来我们来创建一个带参数的存储过程

create proc proc_find_stu(@startId int, @endId int)
as
select * from Student where F_ID between @startId and @endId

执行存储过程(取到id为10-20的学生信息)

exec proc_find_stu 10,20

执行结果
学习笔记:SqlServer存储过程入门
接下来我通过一个存储过程来完成联表查询+分页显示

create proc proc_page(@currPage int, @pageSize int, @keyWord varchar(50))
as
select a.F_ID, a.F_Name, a.F_Sex, b.F_Course, b.F_Score from Student a left join Course b on a.F_ID = b.F_StuId
where [F_Name] like '%' + @keyWord + '%'
order by a.F_ID
offset ((@currPage - 1) * @pageSize) rows
fetch next @pageSize rows only

执行该存储过程

exec proc_page 1, 10, '0'

执行结果
学习笔记:SqlServer存储过程入门

相关文章:

  • 2021-10-20
  • 2021-11-03
  • 2021-11-03
  • 2021-09-19
  • 2021-10-20
  • 2021-10-20
  • 2021-11-01
  • 2021-10-20
猜你喜欢
  • 2021-09-19
  • 2021-11-02
  • 2021-11-01
  • 2021-10-20
  • 2021-11-01
  • 2021-10-20
  • 2021-11-22
  • 2021-10-20
相关资源
相似解决方案