zoukankan      html  css  js  c++  java
  • ROWNUMBER/Max/top的方式封装到存储过程

    1、ROWNUMBER(存储过程)
    1 ALTER PROCEDURE [dbo].[Proc_SqlPageByRownumber]
    2 (
    3 @tbName VARCHAR(255), --表名
    4 @tbGetFields VARCHAR(1000)= '*',--返回字段
    5 @OrderfldName VARCHAR(255), --排序的字段名
    6 @PageSize INT=20, --页尺寸
    7 @PageIndex INT=1, --页码
    8 @OrderType bit = 0, --0升序,非0降序
    9 @strWhere VARCHAR(1000)='', --查询条件
    10 --@TotalCount INT OUTPUT --返回总记录数
    11 )
    12 AS
    13 -- =============================================
    14 -- Author: allen (liyuxin)
    15 -- Create date: 2012-03-30
    16 -- Description: 分页存储过程(支持多表连接查询)
    17 -- Modify [1]: 2012-03-30
    18 -- =============================================
    19 BEGIN
    20 DECLARE @strSql VARCHAR(5000) --主语句
    21 DECLARE @strSqlCount NVARCHAR(500)--查询记录总数主语句
    22 DECLARE @strOrder VARCHAR(300) -- 排序类型
    23
    24 --------------总记录数---------------
    25 IF ISNULL(@strWhere,'') <>''
    26 SET @strSqlCount='Select @TotalCout=count(*) from ' + @tbName + ' where 1=1 '+ @strWhere
    27 ELSE SET @strSqlCount='Select @TotalCout=count(*) from ' + @tbName
    28
    29 --exec sp_executesql @strSqlCount,N'@TotalCout int output',@TotalCount output
    30 --------------分页------------
    31 IF @PageIndex <= 0 SET @PageIndex = 1
    32
    33 IF(@OrderType<>0) SET @strOrder=' ORDER BY '+@OrderfldName+' DESC '
    34 ELSE SET @strOrder=' ORDER BY '+@OrderfldName+' ASC '
    35
    36 SET @strSql='SELECT * FROM
    37 (SELECT ROW_NUMBER() OVER('+@strOrder+') RowNo,'+ @tbGetFields+' FROM ' + @tbName + ' WHERE 1=1 ' + @strWhere+' ) tb
    38 WHERE tb.RowNo BETWEEN '+str((@PageIndex-1)*@PageSize+1)+' AND ' +str(@PageIndex*@PageSize)
    39
    40 exec(@strSql)
    41 SELECT @TotalCount
    42 END




    2、Max/top存储过程
    create proc [dbo].[spSqlPageByMaxTop]
    @tbName varchar(255), --表名
    @tbFields varchar(1000), --返回字段
    @PageSize int, --页尺寸
    @PageIndex int, --页码
    @strWhere varchar(1000), --查询条件
    @StrOrder varchar(255), --排序条件
    @Total int output --返回总记录数
    as
    declare @strSql varchar(5000) --主语句
    declare @strSqlCount nvarchar(500)--查询记录总数主语句

    --------------总记录数---------------
    if @strWhere !=''
    begin
    set @strSqlCount='Select @TotalCout=count(*) from ' + @tbName + ' where '+ @strWhere
    end
    else
    begin
    set @strSqlCount='Select @TotalCout=count(*) from ' + @tbName
    end
    --------------分页------------
    if @PageIndex <= 0
    begin
    set @PageIndex = 1
    end

    set @strSql='select top '+str(@PageSize)+' * from ' + @tbName + '
    where id>(select max(id) from (select top '+str((@PageIndex-1)*@PageSize)+' id from ' + @tbName + ''+@strOrder+')a)
    '+@strOrder+''

    exec sp_executesql @strSqlCount,N'@TotalCout int output',@Total output
    exec(@strSql)
  • 相关阅读:
    web高级第一节
    Socket网络编程
    redis第三节
    redis第二节
    Git(2)
    Xamarin.Android 应用程序配置
    Android--ListView与数据绑定(Xamarin)
    Android--Activity(活动)
    Xamarin Android 真机调试时闪退
    wpf 将Style应用到 ListView 中的 ListViewItem 元素
  • 原文地址:https://www.cnblogs.com/starts/p/5127032.html
Copyright © 2011-2022 走看看