SQL分页存储过程 支持连接查询等复杂的SQL

CREATE PROCEDURE Pagination
(
 @SQL nvarchar(1024),   
 @PageSize int = 20,    --分页大小
 @PageIndex int = 0,    --分页索引
 @Sort nvarchar(100) = '''',    --排序字段
 @TotalCount int = 0 output --总数   
)
AS

set nocount on
/*声明查询字符串*/
declare @strSQL nvarchar(4000)

set @strSQL = '' select @TotalCount=count(*) from (''+@SQL+'') as t ''

/*取得查询结果总数*/
exec sp_executesql
@strSQL,
N''@TotalCount int=0 OUTPUT'',
@TotalCount=@TotalCount OUTPUT

declare @ItemCount int
declare @_PageIndex int

set @_PageIndex = @PageIndex + 1;
/*确定搜索边界*/
set @ItemCount = @TotalCount - @PageSize * @_PageIndex

if(@ItemCount < 0)
    set @ItemCount = @ItemCount + @PageSize
else
    set @ItemCount = @PageSize

if(@ItemCount < 0) return 1

if(@Sort != '''')
begin
    /*声明排序变量*/
    declare @IndexSort1 nvarchar(50), @IndexSort2 nvarchar(50), @Sort1 nvarchar(50), @Sort2 nvarchar(50)
   
    SET @Sort1 = @Sort
    SET @Sort2 = Replace(Replace(Replace(@Sort, ''DESC'', ''@SORT''), ''ASC'', ''DESC''), ''@SORT'', ''ASC'')
 
    print @Sort1
    print @Sort2

    set @strSQL = ''SELECT * FROM
    (SELECT TOP '' + STR(@ItemCount) + '' * FROM
    (SELECT TOP '' + STR(@PageSize * @_PageIndex) + '' * FROM
    (''+@SQL+'') AS t0
    ORDER BY ''+@Sort1 +'') AS t1
    ORDER BY ''+@Sort2 +'') AS t2
    ORDER BY '' +@Sort
end
else
begin
    set @strSQL = ''SELECT * FROM
    (SELECT TOP '' + STR(@ItemCount)

时间: 2024-07-31 16:12:22

SQL分页存储过程 支持连接查询等复杂的SQL的相关文章

sql 分页存储过程实现代码

sql 分页存储过程实现代码 create PROCEDURE Sp_Conn_Sort ( @tblName   varchar(255),       -- 表名 @strGetFields varchar(1000) = '*',  -- 需要返回的列 @fldName varchar(255)='',      -- 排序的字段名 @PageSize   int = 40,          -- 页尺寸 @PageIndex  int = 1,           -- 页码 @doC

asp.net中常用到的SQL分页存储过程

asp.net中常用到的SQL分页存储过程 以下是引用片段:create PROCEDURE [dbo].[myPage] @tblName varchar(255), -- 表名 @fldName varchar(255), -- 排序的字段名,一般为唯一标识 @strGetFields varchar(1000) = ' * ', -- 需要返回的列  @PageSize int = 10, -- 每页有多少条记录 @PageIndex int = 1, -- 第几页 @Count int 

两款sql 分页存储过程代码

文章收藏了两款sql 分页存储过程代码,这二款存储过程是二款高效分页存储过程代码,如果你觉得自己写的语句不够,强的话,可以利用我们现成的高效分页存储过程实例代码. create procedure pages @tablenames varchar(200), --表名,可以是多个表,但不能用别名 @primarykey varchar(100), --主键,可以为空,但@order为空时该值不能为空 @fields varchar(800), --要取出的字段,可以是多个表的字段,可以为空,为

sql分页存储过程可带分页查询条件

假设数据库中有张表,表名是UserName,字段分别是ID(int),Name(nvarchar),Age(int). 如果不带查询条件存储过程是:  代码如下 复制代码 CREATE PROCEDURE [dbo].[UserName]     @pageIndex int,     @pageSize int AS     declare @min int;     declare @max int;     set @min=@pageSize*(@pageIndex-1)+1;    

经过优化测试的SQL分页存储过程

  建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页.但这种分页方法仅适用于较小数据量的情形,因为游标本身有缺点:游标是存放在内存中,很费内存.游标一建立,就将相关的记录锁住,直到取消游标.游标提供了对特定集合中逐行扫描的手段,一般使用游标来逐行遍历数据,根据取出数据条件的不同进行不同的操作.而对于多表和大表中定义的游标(大的数据集合)循环很容易使程序进入一个漫长的

公用ms sql 分页存储过程

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 在编写分页存储过程前我们先为数据库创建一个测试表,这个测试表明叫做order,当中有3个字段,分别是or_id,orName,dateSta;下面创建表脚本: CREATE TABLE [dbo].[Orders](     [or_id] [int] IDENTITY(1,1) NOT NULL,     [orName] [nvarcha

linq to sql 多个DataContext连接查询?

问题描述 如何实现两个DataContext的连接查询?如vardc1=newPersonDataContext();vardc2=newChildrenDataContext();varquery=fromaindc1joinbindc2ona.id=b.pidselectb 解决方案 解决方案二:它们的连接字符串相同解决方案三:同一次查询为何要用两个连接字符串相同的DataContext?你的设计目的是什么>?解决方案四:项目经理这么弄的,目的是用多个DataContext代理不同的业务模块

mssql server sql分页存储过程

一款很简单的sql分布存储过程代码,并且是一款通用分页sql哦 . set quoted_identifier on go set ansi_nulls on go create proc execbypage @sqlquery varchar(2000), --//输入参数:sql检索语句或表名 @pagesize int, --//输入参数:每页显示记录条数 @pageindex int --//输入参数:当前页码 as set nocount on set ansi_warnings o

SQL Server中的连接查询详解_MsSql

在查询多个表时,我们经常会用"连接查询".连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志. 什么是连接查询呢? 概念:根据两个表或多个表的列之间的关系,从这些表中查询数据. 目的:实现多个表查询操作. 知道了连接查询的概念之后,什么时候用连接查询呢? 一般是用作关联两张或两张以上的数据表时用的.看起来有点抽象,我们举个例子,做两张表:学生表(T_student)和班级表(T_class).  T_student