FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

本论坛已关闭(禁止注册、发帖和回复)
请移步 三石和他的朋友们

FineUI首页 WebForms - MVC & Core - JavaScript 常见问题 - QQ群 - 十周年征文活动

FineUI(开源版) 下载源代码 - 下载空项目 - 获取ExtJS - 文档 在线示例 - 版本更新 - 捐赠作者 - 教程

升级到 ASP.NET Core 3.1,快、快、快! 全新ASP.NET Core,比WebForms还简单! 欢迎加入【三石和他的朋友们】(基础版下载)

搜索
查看: 2363|回复: 1
打印 上一主题 下一主题

分页存储过程

[复制链接]
跳转到指定楼层
楼主
发表于 2013-11-19 09:31:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 leetle 于 2013-11-19 09:34 编辑

/****** Object:  StoredProcedure [dbo].[GETRECORDFROMPAGE]    Script Date: 11/19/2013 09:30:34 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

/*************************************
分页存储过程——SQL2005
CREATEON:2013-04-27
CREATEBYYJ
*************************************/
ALTER PROCEDURE [dbo].[GETRECORDFROMPAGE]
(
    @TBLNAME VARCHAR(1000),            --表名
    @PRIMARYCOLUMNS VARCHAR(100),    --主键(PRIMARYKEYS)
    @PAGESIZE INT = 10,
    @PAGEINDEX INT = 1,
    @ORDERTYPE BIT=0,                --排序方式(1:DESC;0:ASC)
    @STRWHERE NVARCHAR(MAX) = NULL,    --条件
    @ROWTOTAL INT=0 OUTPUT
)
AS

DECLARE @STRFILTER NVARCHAR(4000),@SORDER VARCHAR(100)
DECLARE @SQL NVARCHAR(4000)

IF @STRWHERE IS NOT NULL AND @STRWHERE != ''
    BEGIN
        SET @STRFILTER = ' WHERE ' + @STRWHERE + ' '
    END
ELSE
    BEGIN
        SET @STRWHERE = '1=1'
        SET @STRFILTER = ''
    END
   
SET @SQL='SELECT @ROWTOTAL=COUNT(0) FROM '+@TBLNAME + @STRFILTER
EXEC SP_EXECUTESQL @SQL,N'@ROWTOTAL INT OUT',@ROWTOTAL OUT

BEGIN
IF(@ORDERTYPE=1)
    SET @SORDER = @PRIMARYCOLUMNS + ' DESC '
ELSE
    SET @SORDER=@PRIMARYCOLUMNS+' ASC '

IF @PAGEINDEX < 1
    SET @PAGEINDEX = 1
    BEGIN   
        DECLARE @START_ID VARCHAR(50)
        DECLARE @END_ID VARCHAR(50)
        SET @START_ID = CONVERT(VARCHAR(50),(@PAGEINDEX - 1) * @PAGESIZE + 1)
        SET @END_ID = CONVERT(VARCHAR(50),@PAGEINDEX * @PAGESIZE)
        SET @SQL =  ' SELECT '+'*'+ 'FROM (SELECT ROW_NUMBER() OVER(ORDER BY '+@SORDER+') AS ROWNUM,'+'*'
        + 'FROM '+@TBLNAME+') AS D
            WHERE ROWNUM BETWEEN '+@START_ID+' AND '
                +@END_ID +' AND '+ @STRWHERE
                    +' ORDER BY '+@SORDER
    END
END

SET @SQL=' SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY '+@SORDER+') AS ROWNUM,*'
SET @SQL=@SQL+ ' FROM( SELECT TOP(100) PERCENT * FROM '+@TBLNAME
        +' WHERE '+@STRWHERE+' ORDER BY '+@SORDER+')TM1)TM '
SET @SQL=@SQL+' WHERE ROWNUM BETWEEN '+@START_ID+' AND ' +@END_ID

EXEC(@SQL)


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
沙发
发表于 2013-11-19 09:43:29 | 只看该作者
本帖最后由 erp8@live.cn 于 2013-11-19 09:47 编辑

谢谢分享
请问一下:GETRECORDFROMPAGE
这个存储过程是怎么在DEMO.cs 中调用的啊?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|FineUI 官方论坛 ( 皖ICP备2021006167号-1 )

GMT+8, 2024-6-7 10:37 , Processed in 0.057659 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表