【SQL Server】之如何创建存储过程
1 创建存储过程 1.1 创建简单的存储过程 创建语句:create proc usp_helloworldasbeginprint 'Hello World'end 创建完后,调用语句格式 exec + 存储过程名:exec usp_helloworld执行结果: 1.2 创建带参数的存储过程 语句:crea...
·
1 创建存储过程
1.1 创建简单的存储过程
创建语句:
create proc usp_helloworld
as
begin
print 'Hello World'
end
创建完后,调用语句格式 exec + 存储过程名:exec usp_helloworld
执行结果:
1.2 创建带参数的存储过程
语句:
create proc usp_book @name nvarchar(50), @author nvarchar(50)
as
begin
select * from book where name=@name and author=@author
end
表中的数据:
调用存储过程,因为定义两个参数,在调用的时候需要给参数赋值。下面两种方法都行:
(1)exec usp_book "神雕侠侣","金庸"
(2)exec usp_book @name="神雕侠侣",@author="金庸"
执行结果:
1.3 带默认值的存储过程
创建语句:
create proc usp_select_hero1
@heroname nvarchar(50) = '温青青'
as
begin
select * from hero where hero=@heroname
end
表中数据:
因为参数已经给了默认值,在调用存储过程的时候,可以不指定参数。
如:直接调用:exec usp_select_hero1 结果如下:
也可以重新给参数赋值如:exec usp_select_hero1 @heroname='无尘' 结果如下:
1.4 创建带输出参数的存储过程output关键字
创建语句:
create proc usp_output
@bookname nvarchar(50),
@recordCount int output --关键字代表输出参数
as
begin
select * from hero where bookname=@bookname
--把查询的记录条数赋值给变量@recordCount
set @recordCount = (select count(*) from hero where bookname=@bookname)
end
调用带有参数的存储过程,需要定义变量,并把变量传递给参数,如下:
declare @num int
exec usp_output @bookname='书剑恩仇录',@recordCount=@num output
select @num as 记录条数
结果:
2 使用存储过程实现分页
语句:
create proc usp_fenye
@pagesize int=3, --每页记录的条数
@index int=1, --当前查看第几页的内容
@recordcount int output, --总的条数
@pagecount int output --总的页数
as
begin
--分页
select
t.id,
t.bookname,
t.hero
from (select *,rn=row_number() over(order by id asc) from hero) as t
where t.rn between (@index-1) * @pagesize + 1 and @pagesize * @index
--计算总的条数
set @recordcount =( select count(*) from hero)
--计算总的页数
set @pagecount=ceiling(@recordcount * 1.0 / @pagesize) --ceiling向上取整
end
执行:
declare @tiaoshu int
declare @yeshu int
exec usp_fenye @pagesize=5,@index =3,@recordcount=@tiaoshu output,@pagecount=@yeshu output
select @tiaoshu as 总的条数
select @yeshu as 总的页数
结果:
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献1条内容
所有评论(0)