分享Sql Server 存储过程使用方法
作者:just--like 发布时间:2024-01-13 06:42:36
标签:Sql,存储过程
一、简介
简单记录一下存储过程的使用。存储过程是预编译SQL语句集合,也可以包含一些逻辑语句,而且当第一次调用存储过程时,被调用的存储过程会放在缓存中,当再次执行时,则不需要编译可以立马执行,使得其执行速度会非常快。
二、使用
创建格式 create procedure 过程名( 变量名 变量类型 )as begin ........ end
create procedure getGroup(@salary int)
as
begin
SELECT d_id AS '部门编号', AVG(e_salary) AS '部门平均工资' FROM employee
GROUP BY d_id
HAVING AVG(e_salary) > @salary
end
调用时格式,exec 过程名 参数
exec getGroup 7000
三、在存储过程中实现分页
3.1 要实现分页,首先要知道实现的原理,其实就是查询一个表中的前几条数据
select top 10 * from table --查询表前10条数据
select top 10 * from table where id not in (select top (10) id from tb) --查询前10条数据 (条件是id 不属于table 前10的数据中)
3.2 当查询第三页时,肯定不需要前20 条数据,则可以
select top 10 * from table where id not in (select top ((3-1) * 10) id from tb) --查询前10条数据 (条件是id 不属于table 前10的数据中)
3.3 将可变数字参数化,写成存储过程如下
create proc sp_pager
(
@size int , --每页大小
@index int --当前页码
)
as
begin
declare @sql nvarchar(1000)
if(@index = 1)
set @sql = 'select top ' + cast(@size as nvarchar(20)) + ' * from tb'
else
set @sql = 'select top ' + cast(@size as nvarchar(20)) + ' * from tb where id not in( select top '+cast((@index-1)*@size as nvarchar(50))+' id from tb )'
execute(@sql)
end
3.4 当前的这种写法,要求id必须连续递增,所以有一定的弊端
所以可以使用 row_number(),使用select语句进行查询时,会为每一行进行编号,编号从1开始,使用时必须要使用order by 根据某个字段预排序,还可以使用partition by 将 from 子句生成的结果集划入应用了 row_number 函数的分区,类似于分组排序,写成存储过程如下
create proc sp_pager
(
@size int,
@index int
)
as
begin
select * from ( select row_number() over(order by id ) as [rowId], * from table) as b
where [rowId] between @size*(@index-1)+1 and @size*@index
end
来源:https://www.cnblogs.com/just-like/archive/2022/09/07/16659395.html


猜你喜欢
- 经常会有定时备份SQL Server数据库的需要。定时备份到本机的话,还是挺容易的,计划任务就可以完成,但如果是整机挂了,那备份到本机是没意
- 前言本文从代码复用的角度一步一步演示如何从python普通代码进化到面向对象,并通过代码去解释一些面向对象的理论。所以,本文前面的内容都是非
- Vignere密码Vignere Cipher包含用于加密和解密的Caesar Cipher算法. Vignere Cipher与Caesa
- 1.算法概述决策树算法是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策
- 方法一:登录MySQL,先做 set names latin1 ,然后在更新语句或者执行SQL语句mysql> set names l
- 对于DataFrame的修改操作其实有很多,不单单是某个部分的值的修改,还有一些索引的修改、列名的修改,类型修改等等。我们仅选取部分进行介绍
- 背景简介ImageAI是一个面向计算机视觉编程的Python库,支持最先进的机器学习算法。主要图像预测,物体检测,视频对象检测与跟踪等多个应
- sql语句查询数据库中的表名/列名/主键/自动增长值 ----查询数据库中用户创建的表 ----jsj01 为数据库名 select nam
- editTable.js 提供编辑表格当前行、添加一行、删除当前行的操作,其中可以设置参数,如:operatePos 用于设置放置操作的列,
- 配置文件是每个项目最基础的部分,也是不可或缺的部分,比如:数据库连接、中间件属性等常见的配置。提前准备appsettings.json 文件
- 神经网络框架使用方法及设计思想在框自己手写架上基本模仿pytorch,用以学习神经网络的基本算法,如前向传播、反向传播、各种层、各种激活函数
- 现在做的一个小项目需要用到python的相关知识,但是因为太久没用一些东西都忘掉了,因此在本篇博客中记录一下python的函数和类的基础知识
- 什么是闭包:闭包是一个存在内部函数的引用关系。该引用指向的是外部函数的局部变量对象(前提是内部函数使用了外部函数的局部变量)闭包的作用:延长
- PDO::rollBackPDO::rollBack — 回滚一个事务(PHP 5 >= 5.1.0, PECL pdo >=
- Python 爬虫之超链接 url中含有中文出错及解决办法python3.5 爬虫错误:UnicodeEncodeError: 'a
- 循环使用 else 语句在 python 中,for … else 表示这样的意思,for 中的语句和普通的没有区别,else 中的语句会在
- Python 字符串描述Python rstrip() 删除 string 字符串末尾的指定字符(默认为空格).语法rstrip()方法语法
- 前几天又有人在我的这篇文章 python项目练习一:即时标记 下留言,关于其中一个闭包和re.sub的使用不太清楚。我在自己的博客上搜索了下
- 公司的一个项目中,有许多地方需要延时执行一些可重复性的函数(动作),就写了下面这段函数。 呵呵,不知道取什么意思更为确切些,就定为了:Loo
- 导言:在前面的教程里我们探讨了如何为GridView控件添加radio buttons列。当用户最多只能选择一项数据时,我们可以在用户界面里