sql2005存储过程

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER PROCEDURE [dbo].[SP_Page_Exec]
(
  @TblName varchar(1000),                  -- 表名及表集合 比如:tblA a JOIN tblB b ON a.bid=b.id
  @Fields varchar(1000)  ='*',           -- 列名及字段集合
  @SortKey varchar(255)   ='Id',          -- 排序的字段名
  @OrderType varchar(50)  = 'ASC',        -- 排序类型
  @Orders varchar(2000)   = '',    -- 排序条件
  @Wheres varchar(2000)   = '',    -- 查询条件 (不要加 where)
  @PageSize int           = 10,    -- 页长
  @PageIndex int          = 0,    -- 当前页
  @doCount bit            = 0    -- 返回记录总数, 0分页,1返回总记录数
)

AS

declare @strSql varchar(2000)  --- 主语句
declare @MyTable varchar(2000)   --- 引用临时表
declare @PageNum varchar(10)
declare @size varchar(10)

Set @PageNum = cast((@PageSize*@PageIndex) as varchar(50))
Set @size = cast(@PageSize as varchar(50))

If @Wheres !=''
 Begin
    set @Wheres = ' where '+@Wheres
 End


Set @MyTable='(SELECT ROW_NUMBER() OVER(ORDER BY '+@SortKey+' '+@OrderType+') AS RowId ,'+@Fields+' FROM '+@TblName + ' ' + @Wheres+')AS MyTable '
----- @doCount 为1的情况,计算总记录数 -------------
IF @doCount != 0
   begin
   set @strSql = 'select count('+@SortKey+') as Total from '+@MyTable
   end
------ @doCount 为0的情况,进行分页 ------------
ELSE
  begin
 set @strSql= 'SELECT TOP '+@size+' * FROM  ' +@MyTable+ ' WHERE RowId > '+ @PageNum+ ' ' + @Orders
  end

---- 执行存储过程语句
Exec(@strSql)


 

转载于:https://www.cnblogs.com/a13971240/archive/2008/10/22/1316751.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值