实现的通用分页存储过程的三种方法

合集下载

分页、分段与段页式存储

分页、分段与段页式存储

分页、分段与段页式存储⼀. 分页存储管理1.基本思想⽤户程序的地址空间被划分成若⼲固定⼤⼩的区域,称为“页”,相应地,内存空间分成若⼲个物理块,页和块的⼤⼩相等。

可将⽤户程序的任⼀页放在内存的任⼀块中,实现了离散分配。

1) 等分内存页式存储管理将内存空间划分成等长的若⼲物理块,成为物理页⾯也成为物理块,每个物理块的⼤⼩⼀般取2的整数幂。

内存的所有物理块从0开始编号,称作物理页号。

2) 逻辑地址系统将程序的逻辑空间按照同样⼤⼩也划分成若⼲页⾯,称为逻辑页⾯也称为页。

程序的各个逻辑页⾯从0开始依次编号,称作逻辑页号或相对页号。

每个页⾯内从0开始编址,称为页内地址。

程序中的逻辑地址由两部分组成:页号P和页内位移量W。

在执⾏⼀个程序之前,内存管理器需要的准备⼯作:1) 确定程序的页数2) 在主存中留出⾜够的空闲页⾯3) 将程序的所有页⾯载⼊主存⾥。

(静态的分页,页⾯⽆需连续)2. 分页存储管理的地址机构页号x位,每个作业最多2的x次⽅页,页内位移量的位数表⽰页的⼤⼩,若页内位移量y位,则2的y次⽅,即页的⼤⼩,页内地址从000000000000开始到2的y次⽅若给定⼀个逻辑地址为A,页⾯⼤⼩为L,则页号P=INT[A/L],页内地址W=A MOD L3.内存分配相邻的页⾯在内存中不⼀定相邻,即分配给程序的内存块之间不⼀定连续。

对程序地址空间的分页是系统⾃动进⾏的,即对⽤户是透明的。

由于页⾯尺⼨为2的整数次幂,故相对地址中的⾼位部分即为页号,低位部分为页内地址。

4. 页表分页系统中,允许将进程的每⼀页离散地存储在内存的任⼀物理块中,为了能在内存中找到每个页⾯对应的物理块,系统为每个进程建⽴⼀张页表,⽤于记录进程逻辑页⾯与内存物理页⾯之间的对应关系。

页表的作⽤是实现从页号到物理块号的地址映射,地址空间有多少页,该页表⾥就登记多少⾏,且按逻辑页的顺序排列,形如:5. 地址变换页式虚拟存储系统的逻辑地址是由页号和页内地址两部分组成,地址变换过程如图7-3所⽰。

基于ORACLE存储过程分页的实现方法

基于ORACLE存储过程分页的实现方法

vRow :一
db s m

s 1e eu e q. x c t

a d ft h( Cu s r ; n e c v r o )
d ms b

s . ol n q1c um

v hl a e
QL 的情况 , 种做 法不可取 , 这 因为 : 据 量 越 S 数
( C r o , i ;一 C p u r o u o v u s r 1,) o y q e y c l mn t
rt n i e e e ur nt g r
I s vCi s rI t ge l o n e r; r v Row nt g r; I ee
用 户使 用 系 统 时 , 统 性 能 的 优 劣 就 体 现 帮 助 文 档 , 以 用游 标 来 实现 , 现方 法 如 系 可 实
有 很 多 , 们 这 里 选 取 一 种 在 实 际 应 用 中 我
效 果 较 好 的分 页方 法 , 方 法 即使 数 据 量 该 明显 增 加 和 查 询 的 条 件 变 化 多 , 能 也 比 性
v ee =v h r I a dx =” l 3 结 束 语 whr : w ee I ’ n m ’
的 技 术 要 在 存 储 过 程 中 实 现 分 页 , 先 首
部 刷 新 , 页 面 显 示 速 度 显 著 改 善 , 少 使 减 ( e e t * f o t po l I slc r m epe’ I

考 虑 的 是 使 用 分 析 函 数 rW nl e ( , v e e l ’ O L mb r ) wh r I )t
v ra l. a ib e
d bm s

c分页实现方式

c分页实现方式

c分页实现方式
在 C 语言中,实现分页有多种方式,下面介绍两种常见的方法:
1. 固定大小的分页:
- 定义一个结构体来表示页,包含页的内容和一些元数据,如页号和页内偏移量。

- 分配一个大的缓冲区来存储所有的页。

- 在需要分页时,将数据按照固定大小分成若干页,存储在缓冲区中。

- 通过页号和页内偏移量来访问指定的页。

2. 动态分页:
- 定义一个结构体来表示页,包含页的内容和一些元数据,如页号和页内偏移量。

- 在需要分页时,动态分配每页的内存。

- 将数据存储在分配的页内存中。

- 通过页号和页内偏移量来访问指定的页。

无论使用哪种方式,都需要考虑以下几个方面:
1. 页的大小:根据实际需求和内存情况,选择合适的页大小。

2. 页的管理:需要维护页的元数据,如页号、页内偏移量等。

3. 数据的存储和访问:需要根据页号和页内偏移量来存储和访问数据。

4. 内存管理:在动态分页中,需要注意内存的分配和释放。

这两种方式只是基本的示例,实际的分页实现可能会根据具体需求进行一些优化和扩展。

希望我的回答能够帮助到你,如果你还有其他疑问,请随时向我提问,我将尽力为你解答。

Java实现分页功能常见的几种方法

Java实现分页功能常见的几种方法

Java实现分页功能常见的⼏种⽅法⼀、limit关键字service层@Service@Transactionalpublic class ImplStudentService implements StudentService {@Resourceprivate StudentDao studentDao;@Overridepublic List<Student> selectAllStudent(String province, Integer offset, Integer limit) {return studentDao.selectAll(province,offset,limit);}}sql语句select * from student where province = #{province} limit #{offset},#{limit}⼆、hibernate分页service层@Overridepublic List getStudents(Integer pageNo,Integer pageSize) throws Exception {// 分页数据int[] startIdAndCount = new int[2];startIdAndCount[0] = pageNo * pageSize;startIdAndCount[1] = pageSize;return studentDao.selectStudentsByPage(startIdAndCount);}dao层@Overridepublic List findByHqlPage(int[] startIdAndCount) throws Exception {String hql = "...";try {Query query = getSession().createQuery(hql);// 设置分页if (startIdAndCount != null && startIdAndCount.length > 0) {int rowStartIdx = Math.max(0, startIdAndCount[0]);if (rowStartIdx > 0) {query.setFirstResult(rowStartIdx);// 设置开始取值的索引}if (startIdAndCount.length > 1) {int rowCount = Math.max(0, startIdAndCount[1]);if (rowCount > 0) {query.setMaxResults(rowCount);// 设置结束取值的索引}}}return query.list();} catch (RuntimeException re) {log.error("分页查询失败!", re);throw re;}}三、截取List查询结果分页(简单粗暴)...List<StudentEnroll> students = studentlDao.getAllStudents();int count = 0;if(studentEnrolls != null && studentEnrolls.size() > 0) {count = studentEnrolls.size();int fromIndex = pageNo * pageSize;int toIndex = (pageNo + 1) * pageSize;if(toIndex > count) {toIndex = count;}List<StudentEnroll> pageList = studentEnrolls.subList(fromIndex, toIndex);...四、mybatis框架pageHelper插件分页Spring整合:导⼊pom.xml<!-- https:///artifact/com.github.pagehelper/pagehelper --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.2</version></dependency>配置项⽬配置⽂件(我在spring和mybatis整合的配置⽂件中配置的,如果在mybatis核⼼配置⽂件中配置,百度⼀下) <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 依赖数据源 --><property name="dataSource" ref="dataSource"/><!-- 注册加载myBatis映射⽂件 --><property name="mapperLocations"><array><value>classpath*:com/yyz/mapper/*Mapper.xml</value></array></property><!-- PageHelper分页配置 --><property name="plugins"><array><bean class="com.github.pagehelper.PageInterceptor"><property name="properties"><!--使⽤下⾯的⽅式配置参数,⼀⾏配置⼀个,后⾯会有所有的参数介绍 --><value><!--helperDialect属性来指定分页插件使⽤哪种⽅⾔。

分页算法介绍

分页算法介绍

分页算法介绍
分页算法通常用于数据库查询中,特别是当处理大量数据时。

通过将数据分成多个“页”,可以有效地减少单个请求返回的数据量,从而提高应用程序的性能。

以下是分页算法的一些常见类型:
1.基础分页:这是最简单的分页算法,它通过指定起始索引和每页的项目数量来获取特定页的数据。

例如,如果你想获取第3页的数据,每页有10个项目,那么你可以从第2 0个项目开始获取(因为第一页是从第0个开始的)。

2.偏移量分页:这种方法与基础分页相似,但使用偏移量而不是索引。

偏移量表示从数据集的开始处跳过的项目数。

例如,如果你想获取第3页的数据,每页有10个项目,那么你可以从第20个项目开始获取(因为第一页是从第0个开始的)。

3.键值分页:这种方法在数据库中存储每个项目的位置或键值。

然后,你可以通过查找这些键值来获取特定页的数据。

这种方法适用于数据库能够高效地执行键值查找的情况。

4.游标分页:这种方法使用游标作为偏移量,游标表示当前位置。

在获取新的一页时,新的游标将被设置在旧游标的下一页的开始处。

这种方法适用于当项目可能被插入或删除时的情况。

5.边界分页:这种方法通过指定两个边界(最小和最大
值)来获取特定页的数据。

然后,数据库会返回在指定范围内的所有数据。

这种方法适用于当你想要对数据进行排序或过滤时的情况。

在选择分页算法时,需要考虑你的特定需求,例如数据的大小、更新的频率、查询的复杂性以及性能要求。

每种分页算法都有其优点和缺点,因此最好根据你的特定需求进行选择。

执行存储过程的方法

执行存储过程的方法

执行存储过程的方法1.使用SQL命令执行存储过程:使用SQL语句中的`EXEC`或`CALL`命令可以直接执行存储过程。

例如:sqlEXECsp_name;CALLsp_name;其中`sp_name`是存储过程的名称。

如果存储过程有参数,可以在命令中传递参数。

2.使用编程语言执行存储过程:pythonimportpyodbcconnection=pyodbc.connect('DRIVER={SQLServer}; SERVER=server_name;DATABASE=db_name;UID=user name;PWD=password')cursor=connection.cursor()执行存储过程cursor.execute("{CALLsp_name}")关闭连接cursor.close()connection.close()在以上示例中,`sp_name`是存储过程的名称,`server_name`是数据库服务器的名称,`db_name`是数据库的名称,`username`和`password`是连接数据库所需的用户名和密码。

3.使用可视化工具执行存储过程:数据库管理工具如Navicat、SQLServerManagementStudio等提供了可视化界面来执行存储过程。

通过打开工具,连接到数据库,找到存储过程并选择执行即可。

无论使用哪种方式执行存储过程,都可以提供存储过程所需的参数。

存储过程是预先定义的一段可重复使用的代码逻辑,通常用于执行复杂的查询、数据操作等任务。

执行存储过程可以减少重复编写查询语句的工作量,提高效率和代码的可维护性。

如何在MySQL中使用游标实现数据分页

如何在MySQL中使用游标实现数据分页

如何在MySQL中使用游标实现数据分页引言:在web开发中,数据分页是非常常见的需求。

通过将数据分块显示在不同的页面中,可以提高用户体验和系统性能。

而MySQL提供了游标(Cursor)的功能,可以灵活地实现数据分页。

本文将介绍如何在MySQL中使用游标实现数据分页,并探讨其实现原理。

一、什么是游标?游标是一种数据库操作方式,它允许用户在一次查询中逐行处理结果集。

在MySQL中,游标可以用于在存储过程或函数中对结果集进行操作。

二、为什么使用游标实现数据分页?在MySQL中,常见的数据分页方式是使用LIMIT关键字。

但是,使用LIMIT关键字在处理大规模数据时会存在性能问题。

当数据量较大时,LIMIT会对整个结果集进行排序和计算,然后再返回指定的数据。

而使用游标可以逐行获取结果集,无需对整个结果集进行排序和计算,从而减少了系统资源的消耗,提高了查询效率。

三、使用游标实现数据分页的步骤1. 定义游标:首先,需要在存储过程或函数中定义一个游标。

游标包含了查询结果集以及对结果集进行操作的一些方法。

2. 打开游标:在定义游标之后,需要使用OPEN语句打开游标,以便可以查看和操作游标中的数据。

3. 遍历游标:使用FETCH语句遍历游标中的数据。

FETCH语句可以根据需要获取游标中的一行或多行数据。

4. 关闭游标:在使用完游标之后,需要使用CLOSE语句关闭游标,释放资源。

四、示例代码下面是一个使用游标实现数据分页的示例代码:```DELIMITER $$CREATE PROCEDURE `sp_paging`(IN pageIndex INT, IN pageSize INT, OUT resultRowCount INT, OUT resultPageCount INT)BEGIN-- 定义变量DECLARE rowStart INT;DECLARE rowEnd INT;DECLARE totalCount INT;SET rowStart = (pageIndex - 1) * pageSize;SET rowEnd=rowStart + pageSize;-- 定义游标DECLARE cur CURSOR FORSELECT * FROM your_table_name LIMIT rowStart, pageSize;-- 打开游标OPEN cur;-- 获取结果集的总行数SELECT COUNT(*) INTO totalCount FROM your_table_name;-- 计算页数SET resultRowCount = totalCount;SET resultPageCount = CEIL(totalCount / pageSize);-- 遍历游标FETCH cur;-- 关闭游标CLOSE cur;END$$DELIMITER ;```五、使用示例在存储过程被创建后,可以通过调用存储过程来实现数据分页。

C#分页最好的实现方法

C#分页最好的实现方法
首先在数据库里建立以下存储过程: CREATE PROCEDURE dt_DXS_STAFF_ACTIVE @STAFFSTATUS INT,@STAFFNU M INT,@STARTNO INT,@@TOTALCOUNT INT OUTPUT,@@REALNUM INT OU TPUT AS
DECLARE @PRERECCOUNT VARCHAR(10) DECLARE @CURRECCOUNT VARCHAR(10) SELECT @@TOTALCOUNT=COUNT(*) FROM DXS_STAFF_ACTIVE IF @@TOTALCOUNT>(@STARTNO+1)*@STAFFNUM
LoadData(); } if (e.ClickedItem.Text == "下一页")
{ pageCurrent++; if (pageCurrent > pageCount) { MessageBox.Show("已经是最后一页,请点击“上一页”查看!"); return; } else { nCurrent=pageSize*(pageCurrent-1);
具体的建立存储过程我就不说了,简单说明一下以上语句的作用把。 CREATE PROCEDURE dt_DXS_STAFF_ACTIVE 其 实 就 是 生 成 一 个 名 为
dt_DXS_STAFF_ACTIVE 的存储过程,具体命名按实际需要。
TOTALCOUNT:数据行总数。 REALNUM:当前记录数。 以下是将数据导入页面的函数:
ELSE BEGIN SET @PRERECCOUNT= CAST( @STARTNO * @STAFFNUM AS VARCHA
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

TOP n 实现的通用分页存储过程/*转自邹建*/CREATE PROC sp_PageView@tbname sysname, --要分页显示的表名@FieldKey nvarchar(1000), --用于定位记录的主键(唯一性)字段,可以是逗号分隔的多个字段@PageCurrent int=1, --要显示的页码@PageSize int=10, --每页的大小(记录数)@FieldShow nvarchar(1000)='', --以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段@FieldOrder nvarchar(1000)='', --以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC,用于指定排序顺序@Where nvarchar(1000)='', --查询条件@PageCount int OUTPUT --总页数ASSET NOCOUNT ON--检查对象是否有效IF OBJECT_ID(@tbname) IS NULLBEGINRAISERROR(N'对象"%s"不存在',16,1,@tbname)RETURNENDIF OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTable')=0 AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsView')=0AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTableFunction')=0 BEGINRAISERROR(N'"%s"不是表、视图或者表值函数',16,1,@tbname)RETURNEND--分页字段检查IF ISNULL(@FieldKey,N'')=''BEGINRAISERROR(N'分页处理需要主键(或者唯一键)',16,1)RETURNEND--其他参数检查及规范IF ISNULL(@PageCurrent,0)<1 SET @PageCurrent=1IF ISNULL(@PageSize,0)<1 SET @PageSize=10IF ISNULL(@FieldShow,N'')=N'' SET @FieldShow=N'*'IF ISNULL(@FieldOrder,N'')=N''SET @FieldOrder=N''ELSESET @FieldOrder=N'ORDER BY '+LTRIM(@FieldOrder)IF ISNULL(@Where,N'')=N''SET @Where=N''ELSESET @Where=N'WHERE ('+@Where+N')'--如果@PageCount为NULL值,则计算总页数(这样设计可以只在第一次计算总页数,以后调用时,把总页数传回给存储过程,--避免再次计算总页数,对于不想计算总页数的处理而言,可以给@PageCount 赋值)IF @PageCount IS NULLBEGINDECLARE @sql nvarchar(4000)SET @sql=N'SELECT @PageCount=COUNT(*)'+N' FROM '+@tbname+N' '+@WhereEXEC sp_executesql @sql,N'@PageCount int OUTPUT',@PageCount OUTPUTSET @PageCount=(@PageCount+@PageSize-1)/@PageSizeEND--计算分页显示的TOPN值DECLARE @TopN varchar(20),@TopN1 varchar(20)SELECT @TopN=@PageSize,@TopN1=(@PageCurrent-1)*@PageSize--第一页直接显示IF @PageCurrent=1EXEC(N'SELECT TOP '+@TopN+N' '+@FieldShow+N' FROM '+@tbname+N' '+@Where+N' '+@FieldOrder)ELSEBEGIN--处理别名IF @FieldShow=N'*'SET @FieldShow=N'a.*'--生成主键(唯一键)处理条件DECLARE @Where1 nvarchar(4000),@Where2 nvarchar(4000),@s nvarchar(1000),@Field sysnameSELECT @Where1=N'',@Where2=N'',@s=@FieldKeyWHILE CHARINDEX(N',',@s)>0SELECT @Field=LEFT(@s,CHARINDEX(N',',@s)-1),@s=STUFF(@s,1,CHARINDEX(N',',@s),N''),@Where1=@Where1+N' AND a.'+@Field+N'=b.'+@Field,@Where2=@Where2+N' AND b.'+@Field+N' IS NULL',@Where=REPLACE(@Where,@Field,N'a.'+@Field),@FieldOrder=REPLACE(@FieldOrder,@Field,N'a.'+@Field),@FieldShow=REPLACE(@FieldShow,@Field,N'a.'+@Field) SELECT @Where=REPLACE(@Where,@s,N'a.'+@s),@FieldOrder=REPLACE(@FieldOrder,@s,N'a.'+@s),@FieldShow=REPLACE(@FieldShow,@s,N'a.'+@s),@Where1=STUFF(@Where1+N' ANDa.'+@s+N'=b.'+@s,1,5,N''),@Where2=CASEWHEN @Where='' THEN N'WHERE ('ELSE @Where+N' AND ('END+N'b.'+@s+N' IS NULL'+@Where2+N')'--执行查询EXEC(N'SELECT TOP '+@TopN+N' '+@FieldShow+N' FROM '+@tbname+N' a LEFT JOIN(SELECT TOP '+@TopN1 +N' '+@FieldKey+N' FROM '+@tbname+N' a '+@Where+N' '+@FieldOrder+N')b ON '+@Where1+N' '+@Where2+N' '+@FieldOrder)END使用系统存储过程实现的通用分页存储过程/*转自邹建*/CREATE PROC sp_PageView@sql ntext, --要执行的sql语句@PageCurrent int=1, --要显示的页码@PageSize int=10, --每页的大小@PageCount int OUTPUT --总页数ASSET NOCOUNT ONDECLARE @p1 int--初始化分页游标EXEC sp_cursoropen@cursor=@p1 OUTPUT,@stmt=@sql,@scrollopt=1,@ccopt=1,@rowcount=@PageCount OUTPUT--计算总页数IF ISNULL(@PageSize,0)<1SET @PageSize=10SET @PageCount=(@PageCount+@PageSize-1)/@PageSize IF ISNULL(@PageCurrent,0)<1 ORISNULL(@PageCurrent,0)>@PageCountSET @PageCurrent=1ELSESET @PageCurrent=(@PageCurrent-1)*@PageSize+1 --显示指定页的数据EXEC sp_cursorfetch @p1,16,@PageCurrent,@PageSize --关闭分页游标EXEC sp_cursorclose @p1字符串缓存实现的通用分页存储过程/*转自邹建*/CREATE PROC sp_PageView@tbname sysname, --要分页显示的表名@FieldKey sysname, --用于定位记录的主键(惟一键)字段,只能是单个字段@PageCurrent int=1, --要显示的页码@PageSize int=10, --每页的大小(记录数)@FieldShow nvarchar(1000)='', --以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段@FieldOrder nvarchar(1000)='', --以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC用于指定排序顺序@Where nvarchar(1000)='', --查询条件@PageCount int OUTPUT --总页数ASDECLARE @sql nvarchar(4000)SET NOCOUNT ON--检查对象是否有效IF OBJECT_ID(@tbname) IS NULLBEGINRAISERROR(N'对象"%s"不存在',1,16,@tbname)RETURNENDIF OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTable')=0 AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsView')=0AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTableFunction')=0 BEGINRAISERROR(N'"%s"不是表、视图或者表值函数',1,16,@tbname)RETURNEND--分页字段检查IF ISNULL(@FieldKey,N'')=''BEGINRAISERROR(N'分页处理需要主键(或者惟一键)',1,16)RETURNEND--其他参数检查及规范IF ISNULL(@PageCurrent,0)<1 SET @PageCurrent=1IF ISNULL(@PageSize,0)<1 SET @PageSize=10IF ISNULL(@FieldShow,N'')=N'' SET @FieldShow=N'*'IF ISNULL(@FieldOrder,N'')=N''SET @FieldOrder=N''ELSESET @FieldOrder=N'ORDER BY '+LTRIM(@FieldOrder)IF ISNULL(@Where,N'')=N''SET @Where=N''ELSESET @Where=N'WHERE ('+@Where+N')'--如果@PageCount为NULL值,则计算总页数(这样设计可以只在第一次计算总页数,以后调用时,把总页数传回给存储过程,避免再次计算总页数,对于不想计算总页数的处理而言,可以给@PageCount赋值)IF @PageCount IS NULLBEGINSET @sql=N'SELECT @PageCount=COUNT(*)'+N' FROM '+@tbname+N' '+@WhereEXEC sp_executesql @sql,N'@PageCount int OUTPUT',@PageCount OUTPUTSET @PageCount=(@PageCount+@PageSize-1)/@PageSizeEND--计算分页显示的TOPN值DECLARE @TopN varchar(20),@TopN1 varchar(20)SELECT @TopN=@PageSize,@TopN1=@PageCurrent*@PageSize--第一页直接显示IF @PageCurrent=1EXEC(N'SELECT TOP '+@TopN+N' '+@FieldShow+N' FROM '+@tbname+N' '+@Where+N' '+@FieldOrder)ELSEBEGINSELECT @PageCurrent=@TopN1,@sql=N'SELECT @n=@n-1,@s=CASE WHEN @n<'+@TopN+N' THEN @s+N'',''+QUOTENAME(RTRIM(CAST('+@FieldKey+N' as varchar(8000))),N'''''''') ELSE N'''' END FROM '+@tbname+N' '+@Where+N' '+@FieldOrderSET ROWCOUNT @PageCurrentEXEC sp_executesql @sql,N'@n int,@s nvarchar(4000) OUTPUT',@PageCurrent,@sql OUTPUTSET ROWCOUNT 0IF @sql=N''EXEC(N'SELECT TOP 0'+N' '+@FieldShow+N' FROM '+@tbname)ELSEBEGINSET @sql=STUFF(@sql,1,1,N'')--执行查询EXEC(N'SELECT TOP '+@TopN+N' '+@FieldShow+N' FROM '+@tbname+N' WHERE '+@FieldKey+N' IN('+@sql+N') '+@FieldOrder)ENDEND。

相关文档
最新文档