萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> sql server教程 >> 功能不錯的分頁存儲過程,可支持多表查詢,任意排序

功能不錯的分頁存儲過程,可支持多表查詢,任意排序


/**//*
說明:1.支持多表查詢 2.支持任意排序 3.不支持表別名
參考了
    evafly920:[分享]千萬數量級分頁存儲過程(效果演示)
    地址:http://blog.csdn.net/evafly920/archive/2006/03/03/614813.ASPx 

IF(EXISTS(SELECT * FROM sysobjects WHERE [id]=OBJECT_ID('usp_PagingLarge') AND xtype='P'))
    DROP PROCEDURE usp_PagingLarge
*/

GO

CREATE PROCEDURE usp_PagingLarge
@TableNames VARCHAR(200),    --表名,可以是多個表,但不能用別名
@PrimaryKey VARCHAR(100),    --主鍵,可以為空,但@Order為空時該值不能為空
@Fields    VARCHAR(200),        --要取出的字段,可以是多個表的字段,可以為空,為空表示select *
@PageSize INT,            --每頁記錄數
@CurrentPage INT,        --當前頁,0表示第1頁
@Filter VARCHAR(200) = '',    --條件,可以為空,不用填 where
@Group VARCHAR(200) = '',    --分組依據,可以為空,不用填 group by
@Order VARCHAR(200) = ''    --排序,可以為空,為空默認按主鍵升序排列,不用填 order by
AS
BEGIN
    DECLARE @SortColumn VARCHAR(200)
    DECLARE @Operator CHAR(2)
    DECLARE @SortTable VARCHAR(200)
    DECLARE @SortName VARCHAR(200)
    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
        DECLARE @pos1 INT, @pos2 INT
        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 = '<='
copyright © 萬盛學電腦網 all rights reserved