分享

sql分页存储过程

 学习CB121 2012-05-16

sql分页存储过程

分享
分类: sql随想 2009-01-10 00:02
大家都知道使用存储过程,比直接用sql语句效率要高。其实在第一次执行存储过程和使用sql语句,在速度上是没有什么太大的区别的。关键在于sql语句在执行完成以后什么都没有留下,而存储过程则在数据库里有预编译的一个过程。所以存储过程比sql少了编译,所以要快一些。

CREATE PROCEDURE GetRecordFromPage2
    @tblName      varchar(255),       -- 表名
    @fldName      varchar(255),       -- 字段名
    @PageSize     int,           -- 页尺寸
    @PageIndex    int,            -- 页码
    @IsCount      bit ,            -- 返回记录总数, 非 0 值则返回
    @OrderType    bit ,            -- 设置排序类型, 非 0 值则降序
    @strId        varchar(255),   --编号
    @strWhere     varchar(1000)='', -- 查询条件
    @strZiselect  varchar(1000)=''
AS

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

if @strZiselect = ''
begin
   set @strbtype = @tblName
end
else
begin
   set @strbtype = '(select '+@fldName+ ' from ' +  @tblName + ' where ' + @strZiselect+') as '+@tblName
end


if @OrderType != 0
begin
    set @strTmp = '<(select min'
    set @strOrder = ' order by [' + @strId +'] desc'
end
else
begin
   set @strTmp = '>(select max'
    set @strOrder = ' order by [' + @strId +'] asc'
end

set @strSQL = 'select top ' + str(@PageSize) + @fldName+'  from ' +@strbtype+' where [' + @strId +']' + @strTmp + '(['
    + @strId + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+@strId+
     '] from [' + @tblName + ']'+@strOrder+') as tblTmp)'
    + @strOrder

if @strWhere != ''
    set @strSQL = 'select top ' + str(@PageSize) +@fldName +'  from ' +@strbtype+' where [' + @strId + ']' + @strTmp + '(['+ @strId + ']) from (select top '+ str((@PageIndex-1)*@PageSize) + ' ['+@strId+
        '] from [' + @tblName + '] where ' + @strWhere+ +@strOrder+') as tblTmp) and (' + @strWhere + ') '+@strOrder

if @PageIndex = 1
begin
    set @strSQL = 'select top ' + str(@PageSize) +@fldName +'  from '+@strbtype+' where '+@strWhere + @strOrder
end

if @IsCount != 0
    set @strSQL = 'select count(*) as Total from [' + @tblName + ']'

exec (@strSQL)
GO

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多