码迷,mamicode.com
首页 > 数据库 > 详细

数据库系列之T-SQL(存储过程实现分页查询)

时间:2015-03-04 16:30:23      阅读:280      评论:0      收藏:0      [点我收藏+]

标签:

根据TOP ID

CREATE PROC [dbo].[proc_select_page_top]
    @pageindex INT=1,--当前页数
    @pagesize INT=10,--每页大小
    @tablename VARCHAR(50)=‘‘,--表名
    @fields VARCHAR(1000)=‘‘,--查询的字段集合
    @keyid VARCHAR(50)=‘‘,--主键
    @condition NVARCHAR(1000)=‘‘,--查询条件
    @orderstr VARCHAR(500),--排序条件
    @totalRecord BIGINT OUTPUT--总记录数
AS
    IF ISNULL(@orderstr,N‘‘)=N‘‘ SET @orderstr=N ORDER BY +@keyid+N DESC 
    IF ISNULL(@fields,N‘‘)=N‘‘ SET @fields=N*
    IF ISNULL(@condition,N‘‘)=N‘‘ SET @condition=N1=1
    DECLARE @sql NVARCHAR(4000)
    --表的总记录数
    --IF(@totalRecord IS NULL)
    --BEGIN
        SET @sql=NSELECT @totalRecord=COUNT(*)
            +N FROM +@tablename
            +N WHERE +@condition
        EXEC sp_executesql @sql,N@totalRecord INT OUTPUT,@totalRecord OUTPUT
    END
    IF(@pageindex=1)
    BEGIN
        SET @sql=NSELECT TOP +STR(@pagesize)+N +@fields+N FROM +@tablename+N WHERE +@condition+N +@orderstr
        EXEC(@sql)
    END
    ELSE
    BEGIN
        SET @sql=NSELECT TOP +STR(@pagesize)+N +@fields+N FROM +@tablename+
                 N WHERE  +@keyid+N NOT IN(SELECT TOP +STR((@pageindex-1)*@pagesize)+N +@keyid+
                 N FROM +@tablename+N WHERE +@condition+N +@orderstr+N) AND +@condition+N +@orderstr
        EXEC(@sql)
    END
GO

 

根据ROW_NUMBER() OVER

CREATE PROC [dbo].[proc_select_page_row]
    @pageindex INT=1,--当前页数
    @pagesize INT=10,--每页大小
    @tablename VARCHAR(50)=‘‘,--表名
    @fields VARCHAR(1000)=*,--查询的字段集合
    @keyid VARCHAR(50)=‘‘,--主键
    @condition NVARCHAR(1000)=‘‘,--查询条件
    @orderstr VARCHAR(500),--排序条件
    @totalRecord BIGINT  OUTPUT--总记录数
AS
    IF ISNULL(@orderstr,N‘‘)=N‘‘ SET @orderstr=N ORDER BY +@keyid+N DESC 
    IF ISNULL(@fields,N‘‘)=N‘‘ SET @fields=N*
    IF ISNULL(@condition,N‘‘)=N‘‘ SET @condition=N1=1
    DECLARE @sql NVARCHAR(4000)
    --表的总记录数
    --  IF @totalRecord IS NULL
    --  BEGIN
            SET @sql=NSELECT @totalRecord=COUNT(*)
                +N FROM +@tablename
                +N WHERE +@condition
            EXEC sp_executesql @sql,N@totalRecord bigint OUTPUT,@totalRecord OUTPUT
    --END
    IF(@pageindex=1)
    BEGIN
        SET @sql=NSELECT TOP +STR(@pagesize)+N +@fields+N FROM +@tablename+N WHERE +@condition+N +@orderstr
        EXEC(@sql)
    END
    ELSE
    BEGIN
        DECLARE @StartRecord INT
        SET @StartRecord = (@pageindex-1)*@pagesize + 1
        SET @sql=NSELECT * FROM (SELECT ROW_NUMBER() OVER (+ @orderstr +N) AS rowId,+@fields+
                 N FROM + @tablename+N) AS T WHERE rowId>=+STR(@StartRecord)+
                 N and rowId<=+STR(@StartRecord + @pagesize - 1)
        EXEC(@sql)
    END
GO

根据MAX(MIN)ID

--根据MAX(MIN)ID
CREATE PROC [dbo].[proc_select_id]
    @pageindex int=1,--当前页数
    @pagesize int=10,--每页大小
    @tablename VARCHAR(50)=‘‘,--表名
    @fields VARCHAR(1000)=‘‘,--查询的字段集合
    @keyid VARCHAR(50)=‘‘,--主键
    @condition NVARCHAR(1000)=‘‘,--查询条件
    @orderstr VARCHAR(500),--排序条件
    @totalRecord BIGINT OUTPUT--总记录数
AS
    IF ISNULL(@orderstr,N‘‘)=N‘‘ SET @orderstr=N ORDER BY +@keyid+N DESC 
    IF ISNULL(@fields,N‘‘)=N‘‘ SET @fields=N*
    IF ISNULL(@condition,N‘‘)=N‘‘ SET @condition=N1=1
    DECLARE @sql NVARCHAR(4000)
    --表的总记录数
    --IF(@totalRecord IS NULL)
    --BEGIN
        SET @sql=NSELECT @totalRecord=COUNT(*)
            +N FROM +@tablename
            +N WHERE +@condition
        EXEC sp_executesql @sql,N@totalRecord INT OUTPUT,@totalRecord OUTPUT
    --END
    IF(@pageindex=1)
    BEGIN
        SET @sql=NSELECT TOP +STR(@pagesize)+N +@fields+N FROM +@tablename+N WHERE +@condition+N +@orderstr
        EXEC(@sql)
    END
    ELSE
    BEGIN
        DECLARE @operatestr CHAR(3),@comparestr CHAR(1)
        SET @operatestr=MAX
        SET @comparestr=>
        IF(@orderstr<>‘‘)
        BEGIN
            IF(CHARINDEX(desc,LOWER(@orderstr))<>0)
            BEGIN
                SET @operatestr=MIN
                SET @comparestr=<
            END
        END
        SET @sql=NSELECT top +STR(@pagesize)+N +@fields+N FROM +@tablename+N WHERE +@keyid+@comparestr
            +N(SELECT +@operatestr+N(+@keyid+N) FROM +@tablename+N WHERE +@keyid
            +N IN (SELECT TOP +STR((@pageindex-1)*@pagesize)+N +@keyid+N FROM +@tablename+N WHERE 
            +@condition+N +@orderstr+N)) AND +@condition+N +@orderstr
        EXEC(@sql)
    END
GO

数据库系列之T-SQL(存储过程实现分页查询)

标签:

原文地址:http://www.cnblogs.com/cmhunter/p/4313215.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!