sqlserver创建带参数的存储过程(SQLServer存储过程实现单条件分页)
类别:数据库 浏览量:1770
时间:2022-01-20 00:19:22 sqlserver创建带参数的存储过程
SQLServer存储过程实现单条件分页话不多说,请看代码:
SQLServer Procedure Pagination_basic: ALTER PROCEDURE [qiancheng].[Pagination_basic] ( @Table_name VARCHAR (255), --name of table @Rows_target VARCHAR (1000) = '*', --search rows @Rows_condition VARCHAR (1000) = '', --the condition to find target (no where) @Rows_order VARCHAR (255) = '', --the rows to rank @Order_type INT = 0, -- *Q*C* 0 normal 1 down @PageSizes INT = 10, --the size of each page @PageIndex INT = 1, --current page @ShowPages INT, --whether show the pages *Q*C* 1-yes 0-no @ShowRecords INT, --whether show the record *Q*C* 1-yes 0-no @Records_total INT OUTPUT, --returned total records @Pages_total INT OUTPUT --returned total pages ) AS DECLARE @MainSQL_QC nvarchar (2000) --Main SQL sentence DECLARE @Var_QC VARCHAR (100) --Temporary variate DECLARE @Order_QC VARCHAR (400) --the sort to rank SET @Records_total = 0 SET @Pages_total = 0 IF @ShowRecords = 1 OR @ShowPages = 1 BEGIN IF @Rows_condition != '' SET @MainSQL_QC = 'select @Records_total = count(1) from [' + @Table_name + '] where ' +@Rows_condition ELSE SET @MainSQL_QC = 'select @Records_total = count(1) from [' + @Table_name + ']' EXEC sp_executesql @MainSQL_QC, N'@Records_total int out' ,@Records_total OUTPUT END IF @ShowPages = 1 BEGIN IF @Records_total <= @PageSizes SET @Pages_total = 1 ELSE BEGIN SET @Pages_total = @Records_total /@PageSizes IF (@Records_total %@PageSizes) > 0 SET @Pages_total = @Pages_total + 1 END END IF @Order_type = 1 BEGIN SET @Var_QC = '<(select min' SET @Order_QC = ' order by [' + @Rows_order + '] desc' END ELSE BEGIN SET @Var_QC = '>(select max' SET @Order_QC = ' order by [' + @Rows_order + '] asc' END IF @PageIndex = 1 BEGIN IF @Rows_condition != '' SET @MainSQL_QC = 'select top ' + str(@PageSizes) + ' ' +@Rows_target + ' from [' + @Table_name + '] where ' + @Rows_condition + ' ' + @Order_QC ELSE SET @MainSQL_QC = 'select top ' + str(@PageSizes) + ' ' +@Rows_target + ' from [' + @Table_name + '] ' + @Order_QC END ELSE BEGIN IF @Rows_condition != '' SET @MainSQL_QC = 'select top ' + str(@PageSizes) + ' ' +@Rows_target + ' from [' + @Table_name + '] where [' + @Rows_order + ']' + @Var_QC + '([' + @Rows_order + ']) from (select top ' + str((@PageIndex - 1) *@PageSizes) + ' [' + @Rows_order + '] from [' + @Table_name + '] where ' + @Rows_condition + ' ' + @Order_QC + ') as Tmep_QC) and ' + @Rows_condition + ' ' + @Order_QC ELSE SET @MainSQL_QC = 'select top ' + str(@PageSizes) + ' ' +@Rows_target + ' from [' + @Table_name + '] where [' + @Rows_order + ']' + @Var_QC + '([' + @Rows_order + ']) from (select top ' + str((@PageIndex - 1) *@PageSizes) + ' [' + @Rows_order + '] from [' + @Table_name + ']' + @Order_QC + ') as Tmep_QC)' + @Order_QC END EXEC (@MainSQL_QC)
调用:execute pagination_basic 'UserDetail','*','','id','1','5','1','1','1','',''
主要是末尾的语句,拆分下来便是这样:
select top 每页数 列名 from [表名] where [排序字段名] < --1 倒序输出若列 小于之前页数的最小值
(select min ( [排序字段名] )from --2 获得一个指定列名中的最小值并输出
(select top (当前页-1)*每页数 [排序字段名] from [表名] where [条件] [排序类型]) --3 选择之前页数总数据倒序输出
as Tmep_QC)--4 建立一个名为Tmep_QC的临时表--2 获得一个指定列名中的最小值并输出
and [条件] [排序类型]--1 倒序输出若列 小于之前页数的最小值
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持开心学习网!
您可能感兴趣
- sql server 进阶(SqlServer AS的用法)
- SqlServer 表单查询问题及解决方法(SqlServer 表单查询问题及解决方法)
- sqlserver字符串判断函数(解决sql server保存对象字符串转换成uniqueidentifier失败的问题)
- sqlserver 锁表原因(SQL Server学习笔记之事务、锁定、阻塞、死锁用法详解)
- sqlserver两表查询语句格式(sql server实现在多个数据库间快速查询某个表信息的方法)
- SqlServer生成连续数字根据指定的数字操作(SqlServer生成连续数字根据指定的数字操作)
- sql server提供的聚合函数(SQLServer行列互转实现思路聚合函数)
- sqlserver 比较日期(解析SQL Server中SQL日期转换出错的原因)
- 如何使java与sqlserver数据库连接(java连接mysql数据库 java连接sql server数据库)
- microsoftsqlserver官网(Microsoft SQL Server数据库各版本下载地址集合)
- sqlserver怎么手动添加数据库表(SQL Server 数据库调整表中列的顺序操作方法及遇到问题)
- sqlserver查询信息表(SQL Server中Table字典数据的查询SQL示例代码)
- sqlserver字段增加删减(关于SQL Server中bit类型字段增删查改的一些事)
- sqlserver数据库备份怎么还原(SQL Server2012数据库备份和还原的教程)
- sqlserver存储过程使用变量(浅析SQL Server的嵌套存储过程中使用同名的临时表怪像)
- sqlserver复制表结构及数据到新表(SQL SERVER 表与表之间 字段一对多sql语句写法)
- ()
- 网友很惭愧,自己写了很多年的字,到头来还不如一名小学生写的好(自己写了很多年的字)
- 中华第一楷 张瑞龄 86岁高龄,苦练楷书71年,一幅字卖593万(中华第一楷张瑞龄)
- 冯骥才 年意(冯骥才年意)
- ()
- 百事大吉蓝底 绿底手机高清壁纸(绿底手机高清壁纸)
热门推荐
- sqlserver数据类型和长度(SqlServer 数据库 三大 范式)
- mysql将字符串转换为日期的函数(Mysql中时间戳转为Date的方法示例)
- ui界面的测试用例(AmazeUI 模态窗口的实现代码)
- python规定输入值的最大值(实例讲解Python中整数的最大值输出)
- apache配置说明(深入apache host的配置详解)
- angular路由树(详解Angular路由之子路由)
- border:0和border:none的区别
- vue可以用vite打包吗(vite+vue3+element-plus项目搭建的方法步骤)
- C#中ToString()常见的格式
- djangorestfulframework教程(Django restframework 源码分析之认证详解)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9