惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
T
Threat Research - Cisco Blogs
GbyAI
GbyAI
Y
Y Combinator Blog
美团技术团队
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 【当耐特】
S
SegmentFault 最新的问题
IT之家
IT之家
Recent Announcements
Recent Announcements
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
阮一峰的网络日志
阮一峰的网络日志
T
The Blog of Author Tim Ferriss
Martin Fowler
Martin Fowler
Microsoft Azure Blog
Microsoft Azure Blog
V
Visual Studio Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
U
Unit 42
WordPress大学
WordPress大学
博客园 - Franky
L
LangChain Blog
人人都是产品经理
人人都是产品经理
小众软件
小众软件
博客园 - 叶小钗
罗磊的独立博客
酷 壳 – CoolShell
酷 壳 – CoolShell
大猫的无限游戏
大猫的无限游戏
云风的 BLOG
云风的 BLOG
Vercel News
Vercel News
雷峰网
雷峰网
腾讯CDC
Google DeepMind News
Google DeepMind News
博客园 - 三生石上(FineUI控件)
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Help Net Security
Help Net Security
C
Check Point Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
N
News and Events Feed by Topic
V2EX - 技术
V2EX - 技术
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Schneier on Security
Schneier on Security
博客园 - 聂微东
A
Arctic Wolf
H
Heimdal Security Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Recent Commits to openclaw:main
Recent Commits to openclaw:main
T
The Exploit Database - CXSecurity.com
C
Cyber Attacks, Cyber Crime and Cyber Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Google DeepMind News
Google DeepMind News

博客园 - 火龙sky

ASP.NET Ajax发布时异步刷新失效的问题解决方法 关于Tomcat虚拟主机域名的设置--设置本地主机域名 Sql Server 中一个非常强大的日期格式化函数 大型网站架构设计 在ASP.NET中记录错误日志(使用Global.asax) 一个完美的的项目经理 CuteEditor6.0 使用 CE寻找游戏基址+偏移 VirtualAllocEx函数 了解游戏外挂 c#做外挂 step by step(更新至step3:注入) Sql-Server应用程序的高级Sql注入 教程: 汇编语言的准备知识-给初次接触汇编者4 教程: 汇编语言的准备知识-给初次接触汇编者3 教程: 汇编语言的准备知识-给初次接触汇编者2 汇编语言的准备知识--给初次接触汇编者 1 邮件简单发送 GetIP cookies 设置HtmlMeta 值
针对sql 2005优化的高性能分页存储过程
火龙sky · 2009-04-24 · via 博客园 - 火龙sky

存储过程代码如下:

ALTER PROCEDURE [dbo].[Pg_Paging]
@Tables varchar(1000), --表名,多红表是请使用 tA a inner join tB b On a.AID = b.AID
@PK varchar(100),    --主键,可以带表头 a.AID
@Sort varchar(200= ''--排序字段
@PageNumber int = 1,    --开始页码
@PageSize int = 10,        --页大小
@Fields varchar(1000= '*',--读取字段
@Filter varchar(1000= NULL,--Where条件
@Group varchar(1000= NULL,  --分组
@isCount bit = 0     --1    --是否获得总记录数
AS
--
--
select * from GL_NEWS order by GN_UPDATE_DATE DESC
--
exec Pg_Paging @Tables = 'tb_NewsInfo', @PK = 'News_ID', @Sort = 'News_ID DESC', @PageNumber = 2, @PageSize = 15,@Fields = '*', @Group = '', @isCount = 0
DECLARE @strFilter varchar(2000)
declare @sql varchar(8000)
IF @Filter IS NOT NULL AND @Filter != ''
  
BEGIN
   
SET @strFilter = ' WHERE ' + @Filter + ' '
  
END
ELSE
  
BEGIN
   
SET @strFilter = ''
  
END

if @isCount = 1 --只获得记录条数
    begin
        
set @sql = 'SELECT  Count(*) FROM ' + @Tables + @strFilter  
    
end
else
begin
if @Sort = ''
  
set @Sort = @PK + ' DESC '

IF @PageNumber < 1
  
SET @PageNumber = 1

if @PageNumber = 1 --第一页提高性能
begin 
  
set @sql = 'select top ' + str(@PageSize+' '+@Fields+ '  from ' + @Tables + ' ' + @strFilter + ' ORDER BY  '+ @Sort
end 
else
  
begin
  
/**//*Execute dynamic query*/    
   
DECLARE @START_ID varchar(50)
DECLARE @END_ID varchar(50)
SET @START_ID = convert(varchar(50),(@PageNumber - 1* @PageSize + 1)
SET @END_ID = convert(varchar(50),@PageNumber * @PageSize)
    
set @sql =  ' SELECT '+@Fields+ '
   FROM (SELECT ROW_NUMBER() OVER(ORDER BY 
'+@Sort+') AS rownum, 
     
'+@Fields+ '
      FROM 
'+@Tables+') AS D
   WHERE rownum BETWEEN 
'+@START_ID+' AND ' +@END_ID +' ORDER BY '+@Sort
  
END

END
--print @sql

EXEC(@sql)

可以通过封装一个静态函数来执行:(EnterpriseLibrary3。1)

using System;
using System.Data;
using System.Data.Common;
using System.Globalization;
using System.Xml;
using Microsoft.Practices.EnterpriseLibrary.Data;
using Microsoft.Practices.EnterpriseLibrary.Data.Sql;
namespace Glenet.EjiaShop.SqlData
{
    
/// <summary>
    
///  Pageing
    
/// </summary>
    
public class Pageing
    {
        
public Pageing()
        {
            
//
            
// TODO: 在此处添加构造函数逻辑
            
//
        }

        #region Pg_Paging
        
/// <summary>
        
/// Pg_Paging
        
/// </summary>
        
/// <param name="Tables"></param>
        
/// <param name="PK"></param>
        
/// <param name="Filter"></param>
        
/// <returns></returns>
        
public static int Pg_PageCount(string Tables,string PK,string Filter)
        {
            
//创建数据库实例
            
Database db = DatabaseFactory.CreateDatabase();
            
//获得命令
            string sqlCommand 
= "Pg_Paging";
            DbCommand dbCommand 
= db.GetStoredProcCommand(sqlCommand);
            
//设置参数
            db.AddInParameter(dbCommand, "Tables", DbType.String, Tables);
            db.AddInParameter(dbCommand, "PK", DbType.String, PK);
            db.AddInParameter(dbCommand, "Sort", DbType.String, "");
            db.AddInParameter(dbCommand, "PageNumber", DbType.
Double0);
            db.AddInParameter(dbCommand, "PageSize", DbType.
Double0);
            db.AddInParameter(dbCommand, "Fields", DbType.String, "
*");
            db.AddInParameter(dbCommand, "Filter", DbType.String, Filter);
            db.AddInParameter(dbCommand, "
Group", DbType.String, "");
            db.AddInParameter(dbCommand, "isCount", DbType.Boolean, 
1);

            
//执行
            
return int.Parse(db.ExecuteScalar(dbCommand).ToString());    
            
//取得输出参数


        }
        #endregion

        #region Pg_Paging
        
/// <summary>
        
/// Pg_Paging
        
/// </summary>
        
/// <param name="Tables"></param>
        
/// <param name="PK"></param>
        
/// <param name="Sort"></param>
        
/// <param name="PageNumber"></param>
        
/// <param name="PageSize"></param>
        
/// <param name="Fields"></param>
        
/// <param name="Filter"></param>
        
/// <param name="Group"></param>
        
/// <returns></returns>
        
public static DataSet Pg_Paging(string Tables,string PK,string Sort,int PageNumber,int PageSize,string Fields,string Filter,string Group)
        {
            
//创建数据库实例
            
Database db = DatabaseFactory.CreateDatabase();
            
//获得命令
            string sqlCommand 
= "Pg_Paging";
            DbCommand dbCommand 
= db.GetStoredProcCommand(sqlCommand);
            
//设置参数            
            db.AddInParameter(dbCommand, "Tables", DbType.String, Tables);
            db.AddInParameter(dbCommand, "PK", DbType.String, PK);
            db.AddInParameter(dbCommand, "Sort", DbType.String, Sort);
            db.AddInParameter(dbCommand, "PageNumber", DbType.
Double, PageNumber);
            db.AddInParameter(dbCommand, "PageSize", DbType.
Double, PageSize);
            db.AddInParameter(dbCommand, "Fields", DbType.String, Fields);
            db.AddInParameter(dbCommand, "Filter", DbType.String, Filter);
            db.AddInParameter(dbCommand, "
Group", DbType.String, Group);
            db.AddInParameter(dbCommand, "isCount", DbType.Boolean, 
0);

            
//执行
            
return db.ExecuteDataSet(dbCommand);    
        }
        #endregion


    }

}

前台:调用如下:

string filter = "  1 = 1 ";

        AspNetPager1.RecordCount 
= Glenet.EjiaShop.SqlData.Pageing.Pg_PageCount("tb_NewsInfo""News_ID", filter);
        
using (DataSet ds = Glenet.EjiaShop.SqlData.Pageing.Pg_Paging("tb_NewsInfo""News_ID""News_AddTime DESC", AspNetPager1.CurrentPageIndex, AspNetPager1.PageSize, "*", filter, ""))
        
{
            
this.Re_ContentList.DataSource = ds.Tables[0].DefaultView;
            
this.Re_ContentList.DataBind();

            AspNetPager1.CustomInfoText 
= "记录总数:<font color=\"#00007f\"><b>" + AspNetPager1.RecordCount.ToString() + "</b></font>";
            AspNetPager1.CustomInfoText 
+= " 总页数:<font color=\"#00007f\"><b>" + AspNetPager1.PageCount.ToString() + "</b></font>";
            AspNetPager1.CustomInfoText 
+= " 当前页:<font color=\"red\"><b>" + AspNetPager1.CurrentPageIndex.ToString() + "</b></font>";
        }

相当方便。