支持多表查询的存储过程

CREATE PROCEDURE [dbo].[PagingLarge] @TableNames VARCHAR(300),    --表名,可以是多个表,但不能用别名 @PrimaryKey VARCHAR(200),    --主键 @Fields    VARCHAR(400)='',        --要取出的字段,可以是多个表的字段,可以为空,为空表示select * @PageSize INT,            --每页记录数 @CurrentPage INT,        --当前页,0表示第1页 @Filter VARCHAR(400) = '',    --条件,可以为空,不用填 where @Group VARCHAR(200) = '',    --分组依据,可以为空,不用填 group by @Order VARCHAR(400) = '',    --排序,可以为空,为空默认按主键升序排列,不用填 order by @GetTotal Varchar(100)      --取记录总数 AS BEGIN     DECLARE @Operator CHAR(10)  declare @start int  declare @count int  declare @end int  declare @psize int  set @start = (@CurrentPage - 1) * @PageSize + 1  set @end= @start + @PageSize - 1  declare @sql nvarchar(500)

    IF @Fields = ''         SET @Fields = '*'     IF @Filter = ''         SET @Filter = 'Where 1=1'     ELSE         SET @Filter = 'Where ' +  @Filter     IF @Group <>''         SET @Group = 'GROUP BY ' + @Group

    IF @Order <> ''   begin   SET @Order = REPLACE(REPLACE(@Order, ' asc', ' ASC'), ' desc', ' DESC')   IF CHARINDEX(' DESC', @Order) > 0    IF CHARINDEX(' ASC', @Order) > 0    BEGIN     IF CHARINDEX(' DESC', @Order) < CHARINDEX(' ASC', @Order)      SET @Operator = ' ASC'     ELSE      SET @Operator = ' DESC'    END    ELSE     SET @Operator = ' ASC'   ELSE    SET @Operator = ' DESC'   end  else   SET @Operator = ' DESC'

 set @sql = 'select @count=count(' + @GetTotal + ') from ' + @TableNames + ' ' + @Filter  + ''  exec sp_executesql @sql,N'@count int out ',@count out

 set @psize = @PageSize  if @end>@count   begin    set @end=@count    set @psize = @count - @start+1    if @psize<0     set @psize=0   end     exec('         Select ' + @Fields + ' into #tmp FROM  ' + @TableNames + ' ' + @Filter  + @Group + ' orDER BY ' + @Order + '      select top '+@psize+' * from #tmp where '+@PrimaryKey+' in (select top '+@end+' '+@PrimaryKey+' from #tmp) order by '+@PrimaryKey+' '+@Operator+'

  drop table #tmp     ')  select @count as Total END

 

如果有什么错误希望大家指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值