ALTER PROCEDURE [dbo].[SP_LGY_ICU_PAGECUT]
@TableName varchar(255), -- 表名
@DisplayFields varchar(1000) = '*', -- 需要返回的列
@OrderFields varchar(255)='''', -- 排序的欄位名
@OrderType bit = 0, -- 設置排序類型, 非 0 值則降冪
@StrWhere varchar(1500) = '''', -- 查詢條件 (注意: 不要加 where)
@PageSize int = 10, -- 頁尺寸
@PageIndex int OUTPUT, -- 頁碼
@AllRowCount int OUTPUT,
@AllPageCount int OUTPUT AS declare @strSQL nvarchar(4000) -- 主語句
declare @strTmp nvarchar(110) -- 臨時變數
declare @strOrder nvarchar(400) -- 排序類型 begin
declare @d datetime
set @d=getdate()
if @StrWhere !=''''
set @strSQL = N'select @AllRowCount=count(*) from [' + @TableName + '] with(nolock) where '+@StrWhere
else
set @strSQL =N'select @AllRowCount=count(*) from [' + @TableName + ']'+' with(nolock) '
exec sp_executesql @strSQL,N'@AllRowCount int out',@AllRowCount out IF ISNULL(@PageSize,0)<1
SET @PageSize=10
IF @AllPageCount % @PageSize=0
SET @AllPageCount=@AllRowCount/@PageSize
ELSE IF @PageSize=1
SET @AllPageCount=@AllRowCount/@PageSize
ELSE
SET @AllPageCount=@AllRowCount/@PageSize+1
IF ISNULL(@PageIndex,0)<1
SET @PageIndex=1
ELSE IF ISNULL(@PageIndex,0)>@AllPageCount
SET @PageIndex=@AllPageCount if @OrderType != 0--采用升降序的何種方式排序,不是0則降序
begin
set @strTmp = '<(select min'
set @strOrder = ' order by ' + @OrderFields +' desc'
end
else--是0則升序,默認為升序
begin
set @strTmp = '>(select max'
set @strOrder = ' order by ' + @OrderFields +' asc'
end if @PageIndex = 1
begin
if @StrWhere != ''''
set @strSQL = 'select top ' + str(@PageSize) +' '+@DisplayFields+ 'from [' + @TableName + '] with(nolock) where ' + @StrWhere + ' ' + @strOrder
else
set @strSQL ='select top '+ str(@PageSize) +' '+@DisplayFields+ 'from ['+ @TableName + '] with(nolock) '+ @strOrder
--如果是第一頁就執行以上代碼,這樣會加快執行速度
end
else
begin
--以下代碼賦予了@strSQL以真正執行的SQL代碼
set @strSQL = 'select top ' + str(@PageSize) +' '+@DisplayFields+ ' from ['+ @TableName + '] with(nolock) where ' + @OrderFields + '' + @strTmp + '(tabKey) from (select top '+ str((@PageIndex-1)*@PageSize) + ' '+ @OrderFields + ' as tabKey from [' + @TableName + '] with(nolock) ' + @strOrder + ') as tblTmp)'+ @strOrder
if @StrWhere != ''''
set @strSQL = 'select top ' + str(@PageSize) +' '+@DisplayFields+ ' from ['+ @TableName + '] with(nolock) where ' + @OrderFields + '' + @strTmp + '(tabKey) from (select top '+ str((@PageIndex-1)*@PageSize) + ' '+ @OrderFields + ' as tabKey from [' + @TableName + '] with(nolock) where ' + @StrWhere + ' '+ @strOrder + ') as tblTmp) and ' + @StrWhere + ' ' + @strOrder
end
end
Print @StrSql
exec (@strSQL)

SQL分页存储过程——表名、返回的列、排序字段、排序类型、条件、页尺寸、页码的更多相关文章

  1. 修改后的SQL分页存储过程,利用2分法,支持排序

    /****** Object: StoredProcedure [dbo].[sys_Page_v3] Script Date: 08/13/2014 09:32:28 ******/ SET ANS ...

  2. Sql Server根据表名获得所有列及其属性

    select a.name columnname,c.name as typename,case when a.is_nullable =0 then 'Not Null' else 'Null' e ...

  3. SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段值)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段: 方法二:使用拼接SQL, ...

  4. 完整SQL分页存储过程(支持多表联接)

    http://www.cnblogs.com/andiki/archive/2009/03/24/1420289.html Code/********************************* ...

  5. Sql Server根据表名生成查询的存储过程(查询条件可选)

    static void Main(string[] args) { string 表名 = "water_emstime"; string sql = "exec Get ...

  6. [转]关于SQL分页存储过程的分析

    [转]关于SQL分页存储过程的分析 建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用 ...

  7. Delphi调用SQL分页存储过程实例

    Delphi调用SQL分页存储过程实例 (-- ::)转载▼ 标签: it 分类: Delphi相关 //-----下面是一个支持任意表的 SQL SERVER2000分页存储过程 //----分页存 ...

  8. 真正通用的SQL分页存储过程

    关于SQL分页的问题,网上找到的一些SQL其实不能真正做到通用,他们主要是以自增长ID做为前提的.但在实际使用中,很多表不是自增长的,而且主键也不止一个字段,其实我们稍做改进就可以达到通用.这里还增加 ...

  9. 向SQL Server 现有表中添加新列并添加描述.

    注: sql server 2005 及以上支持. 版本估计是不支持(工作环境2005,2008). 工作需要, 需要向SQL Server 现有表中添加新列并添加描述. 从而有个如下存储过程. (先 ...

随机推荐

  1. 解决ubuntu每次重启屏幕亮度都重置为最高亮度问题

    很多朋友都会碰到这个问题,Ubuntu系统,每次通过系统设置修改了屏幕亮度,重启系统都会将屏幕亮度调成最大值,很是苦恼. 上网搜索一番发现,修改屏幕亮度的文件是:/sys/class/backligh ...

  2. 初识Flask

    首先在学习flask的前提,我是使用了很久的django和tornado,现在在写总结也是本着工作后方便使用flask 少点东西,对flask的介绍和优点总结 1.安装 pip install fla ...

  3. Node.js简介

    Node核心思想:1.非阻塞:2.单线程:3.事件驱动. 在目前的web应用中,客户端和服务器端之间有些交互可以认为是基于事件的,那么AJAX就是页面及时响应的关键.每次发送一个请求时(不管请求的数据 ...

  4. Myeclipse8.5 反编译插件 jad 安装

    准备工作 下载jad.exe文件和下载jadeclipse插件:http://pan.baidu.com/s/1pJKjVwn JadClipse 官网:http://jadclipse.source ...

  5. SQL Server 中几种常见的约束关系

    1.创建唯一约束 当表中已创建主键,但又要保证其他数据列的值唯一时,可以使用唯一约束,并且唯一约束允许NULL值(只有一个) (1)展开指定的数据库: (2)右击要创建唯一约束的表,在弹出的快捷菜单中 ...

  6. POJ 1979

    这是一道比较水的DPS的题目 题意就是求你可以走到的黑色的地板砖的块数,@代表你的起点,也是黑色的地板砖,#代表白色的,则说明你不能走,这就是一个广搜的题目 思路也很简单,如果你周围的那块地板是黑色的 ...

  7. centos 7 升级后yum install出现Exiting on user cancel

    centos 7 升级后yum install出现Exiting on user cancel centos 7.x升级后用yum install进行安装时经常出现Exiting on user ca ...

  8. centos6.5 tomcat开机启动

    可参考:centos6.5 nginx开机启动 /etc/init.d/下添加tomcatd文件,内容如下: #!/bin/sh # # chkconfig: - # # Licensed to th ...

  9. NGUI 图片变灰

    效果图 1.先准备好一个变灰shader.代码如下 Shader "Custom/Gray" { Properties { _MainTex ("Base (RGB), ...

  10. Python初识

    Python第一天   一.为什么学Python        作为一名linux运维工程师现在越来越感觉不好干了.没有地位,还待背黑锅,并且运维自动化发展的这么快,普通运维岗位的路也越来越窄(因为我 ...