MS-SQL分页函数+ASP

CREATE PROCEDURE [dbo].[USP_GetList]

(

@pageIndex int = 1 -- 当前页码0 表示返回所有符合内容

,@pageSize int = 10 -- 页尺寸

,@SID nvarchar(30) = '' -- 主键字段

,@strGetField nvarchar(1000) = '*' -- 需要返回的列

,@strTableName nvarchar(30) = '' --表名

,@strWhere nvarchar(2000) = '' -- 查询条件(注意: 条件中要带where)

,@strOrderBy nvarchar(300) = '' -- 排序

--,@MemberID int=0 --会员ID

)

AS

SET NOCOUNT ON

DECLARE @strSQL nvarchar(4000)

DECLARE @startPos int

DECLARE @endPos int

DECLARE @num int

SET @startPos=@pageSize*(@pageIndex-1)+1

SET @endPos=@startPos+@pageSize-1

--页大小*(页数-1)

SET @num = @pageSize * (@PageIndex - 1)

IF @PageIndex!=0

BEGIN

IF @strWhere != ''

SET @strSQL = 'SELECT TOP '+ cast(@pageSize as nvarchar(10)) +' '+ @strGetField +' FROM '+ @strTableName +' WHERE ('+ cast(@SID as nvarchar(30)) +' NOT IN (SELECT TOP '+ cast(@num as nvarchar(20)) +' '+ cast(@SID as nvarchar(30)) +' FROM '+ @strTableName +' where '+@strWhere+' ORDER BY '+ cast(@strOrderBy as nvarchar(255)) +' )) and '+@strwhere+' ORDER BY '+cast(@strOrderBy as varchar(255)) + ''

else

SET @strSQL = 'SELECT TOP '+ cast(@pageSize as nvarchar(10)) +' '+ @strGetField +' FROM '+ @strTableName +' WHERE ('+ cast(@SID as nvarchar(30)) +' NOT IN (SELECT TOP '+ cast(@num as nvarchar(20)) +' '+ cast(@SID as nvarchar(30)) +' FROM '+ @strTableName +' ORDER BY '+ cast(@strOrderBy as nvarchar(255)) +' )) ORDER BY '+ cast(@strOrderBy as varchar(255)) + ''

--SET @strSQL = 'SELECT TOP 页大小 * FROM Users WHERE (ID NOT IN (SELECT TOP (页大小*(当前页-1)) ID FROM Users ORDER BY ID DESC )) ORDER BY ID DESC'

END

ELSE

BEGIN

IF @strWhere != ''

SET @strSQL = 'select '+ @strGetField +' from ' + @strTableName + ' where '+ @strWhere +' order by '+ @strOrderBy

ELSE

SET @strSQL = 'select '+ @strGetField +' from ' + @strTableName + ' order by '+ @strOrderBy

END

--print(@strSQL)

EXEC(@strSQL)

GO

第二个存储过程

CREATE PROCEDURE [dbo].[USP_GetTotal]

(

@strTableName nvarchar(30) = '',

@strWhere nvarchar(2000) = '' -- 查询条件(注意: 条件中要带where)

)

AS

SET NOCOUNT OFF

DECLARE @strSQL nvarchar(2500)

IF @strWhere != ''

SET @strSQL = 'select count(*) as Total from ['+ @strTableName +'] where '+ @strWhere

ELSE

SET @strSQL = 'select count(*) as Total from ['+ @strTableName +']'

EXEC(@strSQL)

GO

下面是调用这个存储过程的两个函数。可以放到一个包含文件里

,注意,下面的函数里面使用的一些变量,是全局的变量,不是参数传入的,所以需要在调用函数钱,给全局变量赋值。

<%

'取记录总数存储过程

public function getDataRowCount(strTableName, strWhere)

dim maxCount

dim myobj

dim rsCount

maxCount = 0

Set myobj = Server.CreateObject("ADODB.Command")

with myobj

.ActiveConnection = conn

.CommandText = "USP_GetTotal"

.CommandType = 4

.Prepared = true

.Parameters.append .CreateParameter("@strTableName", 200, 1, 30, strTableName)

.Parameters.append .CreateParameter("@strWhere", 200, 1, 2000, strWhere)

Set rsCount = .Execute

end with

Set myobj = Nothing

maxCount = rsCount("Total")

rsCount.close:Set rsCount = Nothing

getDataRowCount = maxCount

end function

'单表分页存储过程

sub getDataRS()

dim obj

Set obj = Server.CreateObject("ADODB.Command")

with obj

.ActiveConnection = conn

.CommandText = "USP_GetList"

.CommandType = 4

.Prepared = true

.Parameters.append .CreateParameter("@pageIndex", 3, 1, 4, iPageIndex)

.Parameters.append .CreateParameter("@pageSize", 3, 1, 4, iPageSize)

.Parameters.append .CreateParameter("@SID", 200, 1, 30, SID) ' 2000

.Parameters.append .CreateParameter("@strGetField", 200, 1, 1000, strGetField)

.Parameters.append .CreateParameter("@tableName", 200, 1, 30, strTableName)

.Parameters.append .CreateParameter("@strWhere", 200, 1, 2000, strWhere)

.Parameters.append .CreateParameter("@strOrderBy", 200, 1, 300, strOrderBy)

Set rstobj = .Execute

end with

Set obj = Nothing

end sub

%>

下面是调用这组分页存储过程的实例

'#############定义分页存储过程所要使用的变量##################################################

'1.定义变量,给部分变量设定初始值

dim iPageIndex, iPageSize, iRowCount

dim strWherem, strTableName, SID, strGetField, strWhere, strOrderBy

iPageSize = 12 '一页内显示的记录条数

strTableName = "dataTable" '表名

SID = "id" '主键名

strGetField = "id, field1,field2,field3"

'要显示的字段名

strWhere = "where1=1 and where2=2"

'where子句

strOrderBy = "id desc" '排序

'2,执行getPageInf() 得到(1)iPageIndex:当前页数,(2)iRowCount:总记录数,(3)iPageCount:总页数

Call getPageInfo() 'include_gb/page.asp

'3,先定义rsTobj,再执行getDataRS().sub getDataRS()使用上面定义的表明,字段,where,页数,总记录数语句等,去访问存储过程,并把结果付给rsTobj(集合)

dim rsTobj

Call getDataRS()

'4,rsTobj得到了返回数据,开始循环输出,写到过程里,方便调用

sub showProducts()

if rsTobj.eof Then

response.Write("暂时没有数据")

else

do while not rsTobj.eof

Call showProdTable(rsTobj("id"),rsTobj("NewsName"),rsTobj("Pictures"),rsTobj("abstract"), rsTobj("AddTime"))

rsTobj.moveNext

loop

end if

CloseRS(rsTobj) '关闭链接 include_gb/connSiteData.asp

end sub

'###############################################################

时间: 2024-11-01 17:57:02

MS-SQL分页函数+ASP的相关文章

公用ms sql 分页存储过程

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 在编写分页存储过程前我们先为数据库创建一个测试表,这个测试表明叫做order,当中有3个字段,分别是or_id,orName,dateSta;下面创建表脚本: CREATE TABLE [dbo].[Orders](     [or_id] [int] IDENTITY(1,1) NOT NULL,     [orName] [nvarcha

MS SQL Server数据库查询优化及分页算法

server|分页|数据|数据库|算法|优化 探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页.以下代码说明了我们实例中数据库的"红头文件"一表的部分数据结构:CREATE TABLE [dbo].[TGongwen] (    --TGongwen是红头文件表名    [Gid] [int] IDENTITY (1, 1) NOT NULL ,--本表的id号,也是主键    [title] [varchar] (80) COLLATE

两个高效的ASP分页函数

两个高效的ASP分页函数(统计记录数,分页提取记录) <% '    /*智能返回分页SQL语句*/ '    /// <summary> '    /// 功能:智能返回分页SQL语句 '    /// </summary> '    /// <param name="primaryKey">主键(不能为空)</param> '    /// <param name="queryFields">提取

一个实用的ASP分页函数,解决你重复写分页代码的烦恼

   有时候,大家是不是因为写一些重复的代码而感到烦恼呢?由于在做ASP程序时,很多时候都要用到分页,重复作分页程序错误多不说了,而且影响到作程序的积极性,故写一分页函数,方便大家调用.如下:       <%'=================   ProgrammName: 分页函数   ======================='  ================   Programmed  by  Bubuy   ====================='    ========

asp通用分页函数,自动输出数据库列名、内容

分页|函数|数据|数据库 '自动输出数据库列名.内容并分页通用函数 [非常精典]'只需要更改数据库连接代码,即可输入完整的表格内容信息,调用代码如下: <%Function cutPage(sqlStr,Conn,dateNums,pageNums,URLs)'利用ADO分页的函数Dim sql,Cn,dateNum,pageNum,URL,rsDateSql=Trim(sqlStr) '获得sql语句.Set Cn=Conn '获得数据对象dateNum=Cint(dateNums) '获得每

探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页

探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页.以下代码说明了我们实例中数据库的一表的部分数据结构: CREATE TABLE [dbo].[TGongwen] (    --TGongwen是红头文件表名    [Gid] [int] IDENTITY (1, 1) NOT NULL ,--本表的id号,也是主键    [title] [varchar] (80) COLLATE Chinese_PRC_CI_AS NULL ,  --红头文件的

asp.net中常用到的SQL分页存储过程

asp.net中常用到的SQL分页存储过程 以下是引用片段:create PROCEDURE [dbo].[myPage] @tblName varchar(255), -- 表名 @fldName varchar(255), -- 排序的字段名,一般为唯一标识 @strGetFields varchar(1000) = ' * ', -- 需要返回的列  @PageSize int = 10, -- 每页有多少条记录 @PageIndex int = 1, -- 第几页 @Count int 

ASP VBScript 分页函数

vbscript|分页|函数 作用: 为了通用性考虑, 本函数主要功能为分页导航, 定义数据库连接和调用数据在调用页操作. 1.1 函数 fPageCount 内容1.2 包含文件 abbr.asp, 非必须2.1 使用函数例12.2 使用函数例22.3 使用函数例3 注: 例中的脚本为跳转框必须 效果: -------------------------------------------------------------首页 上十 上一 1 2 3 4 5 6 7 8 9 10  下一 下

MS SQL Server 2000 中文模糊搜寻存储过程及函数

server|存储过程|函数|中文 这些存储过程/函数可以在 MS SQL Server 2000 里使用,包含两组存储过程, 这两组函数的功能相同, 只是适用的汉字内码范围不同.这些存储过程及函数支持 GBK (大陆简体中文及繁体中文) 和 BIG5 内码 (台湾及香港等的繁体中文)这些函数将直接用在 SQL 语句里, 使用非常方便.可以按照含有读音相近的文字进行查找, 可以处理多音字, 可以查找含有某个相近读音的字的记录, 在查找姓名时特别有用.这些存储过程全部用 C++ Builder 编