-- 需要返回的列 

  • 栏目:编程 时间:2020-05-03 19:33
<返回列表

****** 对象: StoredProcedure [dbo].[sp_GetEmployee] 脚本日期: 11/12/2009 14:10:29 ******/Create PROCEDURE [dbo].[sp_GetPageList]@tblName varchar(255), -- 表名@strGetFields varchar(1000) = '*', -- 需要返回的列 @fldName varchar(255)='', -- 排序的字段名@PageSize int = 10, -- 页尺寸@PageIndex int = 1, -- 页码@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序@strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)ASdeclare @strSQL varchar(5000) -- 主语句declare @strTmp varchar(110) -- 临时变量declare @strOrder varchar(400) -- 排序类型

-- 获取指定页的数据
CREATE PROCEDURE dbo.Pagination
@tblName   varchar(255),               -- 表名
@strGetFields varchar(1000) = '*',      -- 需要返回的列 
@fldName varchar(255)='',              -- 排序的字段名
@PageSize   int = 10,                  -- 页尺寸
@PageIndex  int = 1,                   -- 页码
@doCount  bit = 0,               -- 返回记录总数, 非 0 值则返回
@OrderType bit = 0,              -- 设置排序类型, 非 0 值则降序
@strWhere  varchar(1500) = ''          -- 查询条件 (注意: 不要加 where)

if @OrderType != 0beginset @strTmp = '(select min'set @strOrder = ' order by [' + @fldName +'] desc'--如果@OrderType不是0,就执行降序,这句很重要!endelsebeginset @strTmp = '(select max'set @strOrder = ' order by [' + @fldName +'] asc'end

AS

if @PageIndex = 1beginIF @strWhere != '' SET @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from [' + @tblName + '] where ' +@strWhere + ' ' + @strOrderELSESET @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['+ @tblName + '] '+ @strOrder

declare @strSQL   varchar(5000)        -- 主语句
declare @strTmp   varchar(110)        -- 临时变量
declare @strOrder varchar(400)        -- 排序类型

--如果是第一页就执行以上代码,这样会加快执行速度endelsebegin--以下代码赋予了@strSQL以真正执行的SQL代码set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'+ @strOrder

select @strSQL=''
select @strTmp=''
select @strOrder=''

if @strWhere != ''set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['+ @tblName + '] where [' + @fldName + ']'

if @doCount != 0
    begin
        if @strWhere !=''
            set @strSQL = 'select count(*) as Total from [' + @tblName + '] where '+@strWhere
        else
            set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
    end  
    --以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况
else
    begin
        if @OrderType != 0
            begin
                set @strTmp = '<(select min'
                set @strOrder = ' order by [' + @fldName +'] desc'
                --如果@OrderType不是0,就执行降序,这句很重要!
            end
        else
            begin
                set @strTmp = '>(select max'
                set @strOrder = ' order by [' + @fldName +'] asc'
            end
        
        if @PageIndex = 1
            begin
                if @strWhere != ''
                    set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ '  from [' + @tblName + '] where ' + @strWhere + ' ' + @strOrder
                else
                    set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ '  from ['+ @tblName + '] '+ @strOrder
                --如果是第一页就执行以上代码,这样会加快执行速度
            end
        else
            begin
                --以下代码赋予了@strSQL以真正执行的SQL代码
                set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ '  from ['
                + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'+ @strOrder
                if @strWhere != ''
                    set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ '  from ['
                    + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
                    + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
                    + @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
                    + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
            end 
        
    end   

exec (@strSQL)
GO

if @strWhere !=''SET @strSQL = @strSQL+';Select count(*) AS Total FROM [' + @tblName + '] Where '+@strWhereelseset @strSQL = @strSQL+';Select count(*) AS Total FROM [' + @tblName + ']'

--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况

exec (@strSQL)温馨提示,如采用视图+非聚集索引速度会更快,经测试,可以支持千万级数据处理

上一篇:DataObject用于业务逻辑,通过EF可以自动帮助我们的程序自动生成相关数据库 下一篇://访问二维数组的方法,1、读XML文件内容

更多阅读

//访问二维数组的方法,1、读XML文件内容

编程 2020-05-03
本文分享了php读写json文件的实例代码,非常实用,有兴趣的同学可以参考一下 例子 ?php 现在有...
查看全文

国内还没有什么DBM程序

编程 2020-05-03
这个同学录原来给我们班级用的,因为服务器没有mysql支持,就选择了DBM国内还没有什么DBM程序...
查看全文

韦德体育就是留言页面

编程 2020-05-03
今天我们来讲一下用php制作简单的留言板,首先来分析一下留言板, ajax验证文章我以前写过很多...
查看全文

友情链接: 网站地图

Copyright © 2015-2019 http://www.koi-bumi.com. 韦德体育有限公司 版权所有