zoukankan      html  css  js  c++  java
  • sql server2000 paged store procedure

    sql server 2000 paged store procedure ,we still used in project:

    代码
    /****** Object: StoredProcedure [dbo].[page] Script Date: 09/28/2010 18:38:39 ******/
    SET ANSI_NULLS ON
    GO

    SET QUOTED_IDENTIFIER ON
    GO

    CREATE Procedure [dbo].[page]
    /* Param List */
    @TableNames VARCHAR(200), --表名,可以是多个表,但不能用别名
    @PrimaryKey VARCHAR(100), --主键,可以为空,但@Order为空时该值不能为空
    @Fields VARCHAR(200), --要取出的字段,可以是多个表的字段,可以为空,为空表示select *
    @PageSize INT, --每页记录数
    @CurrentPage INT, --当前页,0表示第1页
    @Filter VARCHAR(2800) = '', --条件,可以为空,不用填 where
    @Group VARCHAR(200) = '', --分组依据,可以为空,不用填 group by
    @Order VARCHAR(200) = '' , --排序,可以为空,为空默认按主键升序排列,不用填 order by
    @totalCount bigint output
    AS
    BEGIN

    DECLARE @getCountScript nvarchar(4000)
    DECLARE @totalRows bigint
    IF @Filter = ''
    SET @Filter = ' WHERE 1=1 '
    ELSE
    SET @Filter = ' WHERE ' + @Filter

    Set @getCountScript = 'select @totalRows = count(1) from ' + @TableNames + @Filter
    Execute sp_executesql @getCountScript, N'@totalRows int output', @totalCount output;

    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 = '<='
    ELSE
    SET @Operator = '>='
    END
    ELSE
    SET @Operator = '<='
    ELSE
    SET @Operator = '>='
    SET @SortColumn = REPLACE(REPLACE(REPLACE(@Order, ' ASC', ''), ' DESC', ''), ' ', '')
    SET @pos1 = CHARINDEX(',', @SortColumn)
    IF @pos1 > 0
    SET @SortColumn = SUBSTRING(@SortColumn, 1, @pos1-1)
    SET @pos2 = CHARINDEX('.', @SortColumn)
    IF @pos2 > 0
    BEGIN
    SET @SortTable = SUBSTRING(@SortColumn, 1, @pos2-1)
    IF @pos1 > 0
    SET @SortName = SUBSTRING(@SortColumn, @pos2+1, @pos1-@pos2-1)
    ELSE
    SET @SortName = SUBSTRING(@SortColumn, @pos2+1, LEN(@SortColumn)-@pos2)
    END
    ELSE
    BEGIN
    SET @SortTable = @TableNames
    SET @SortName = @SortColumn
    END
    END
    ELSE
    BEGIN
    SET @SortColumn = @PrimaryKey
    SET @SortTable = @TableNames
    SET @SortName = @SortColumn
    SET @Order = @SortColumn
    SET @Operator = '>='
    END

    DECLARE @type varchar(50)
    DECLARE @prec int
    SELECT @type=t.name, @prec=c.prec
    FROM sysobjects o
    JOIN syscolumns c on o.id=c.id
    JOIN systypes t on c.xusertype=t.xusertype
    WHERE o.name = @SortTable AND c.name = @SortName
    IF CHARINDEX('char', @type) > 0
    SET @type = @type + '(' + CAST(@prec AS varchar) + ')'

    DECLARE @TopRows INT
    SET @TopRows = @PageSize * @CurrentPage + 1
    print @TopRows
    print @Operator
    EXEC('
    DECLARE @SortColumnBegin
    ' + @type + '
    SET ROWCOUNT
    ' + @TopRows + '
    SELECT @SortColumnBegin=
    ' + @SortColumn + ' FROM ' + @TableNames + ' ' + @Filter + ' ' + @Group + ' ORDER BY ' + @Order + '
    SET ROWCOUNT
    ' + @PageSize + '
    SELECT
    ' + @Fields + ' FROM ' + @TableNames + ' ' + @Filter + ' AND ' + @SortColumn + '' + @Operator + '@SortColumnBegin ' + @Group + ' ORDER BY ' + @Order + '
    ')
    END

    GO

  • 相关阅读:
    POJ 1659 Frogs' Neighborhood (贪心)
    HDU 2544 最短路 (Floyd)
    CodeForces 632C Grandma Laura and Apples (模拟)
    CodeForces 731F Video Cards (数论+暴力)
    CodeForces 731C Socks (DFS或并查集)
    CodeForces 731B Coupons and Discounts (水题模拟)
    CodeForces 731A Night at the Museum (水题)
    UVaLive 6834 Shopping (贪心)
    zzuli 1484 继续双线
    zzuli 1875多线DP
  • 原文地址:https://www.cnblogs.com/huaxiaoyao/p/1837814.html
Copyright © 2011-2022 走看看