ASP构造大数据量的分页SQL语句

 1 < %@Language  =   " VBScript "  Codepage  =   " 936 " % >
 2 < %
 3 ' 分页sql语句生成代码
 4 Function  GetPageSql(TblName,FldName,PageSize,PageIndex,OrderType,StrWhere)
 5      Dim  StrTemp,StrSql,StrOrder
 6      ' 根据排序方式生成相关代码
 7      If  OrderType  =   0   Then
 8         StrTemp  =   " > (Select Max([ "   &  FldName  &   " ])"
 9         StrOrder  =   "  Order By [ "   &  FldName  &   " ] Asc"
10      Else
11         StrTemp  =   " < (Select Min([ "   &  FldName  &   " ])"
12         StrOrder  =   "  Order By [ "   &  FldName  &   " ] Desc"
13      End   If
14     
15      ' 若是第1页则无须复杂的语句
16      If  PageIndex  =   1   Then
17         StrTemp  =   " "
18          If  StrWhere  <>   ""   Then
19             Strtmp  =   "  Where  "   &  StrWhere
20          End   If
21         StrSql  =   " Select Top  "   &  PageSize  &   "  * From [ "   &  TblName  &   " ] "   &  Strtmp  &  StrOrder
22      Else          ' 若不是第1页,构造sql语句
23         StrSql  =   " Select Top  "   &  PageSize  &   "  * From [ "   &  TblName  &   " ] Where [ "   &  FldName  &   " ] "   &  StrTemp  &  _
24          "  From (Select Top  "   &  (PageIndex - 1 *  PageSize  &   "  [ "   &  FldName  &   " ] From [ "   &  TblName  &   " ] "  
25          If  StrWhere  <>   ""   Then
26             StrSql  =  StrSql  &   "  Where  "   &  StrWhere
27          End   If
28         StrSql  =  StrSql  &  StrOrder  &   " ) As Tbltemp)"
29          If  StrWhere  <>   ""   Then
30             StrSql  =  StrSql  &   "  And  "   &  StrWhere
31          End   If
32         StrSql  =  StrSql  &  StrOrder
33      End   If
34     GetPageSql  =  StrSql         ' 返回sql语句
35 End Function
36 Response.Write(GetPageSql( " Message " , " MessageID " , 10 , 1 , 0 , "" ))
37 % >
在网上找了一个 Asp数据操作组件(百万级分页) ,实用环境:Asp+DLL+MsSQL(这个网上很多地方都可以下载),并且其中结合SQL存储过程,说实话以前SQL存储过程接触的比较少,所以在调试该组件的时候遇到了一些问题,并试着改了一下(作者别生气(^..^)),高手们别笑话我。 原代码如下: 有分页列表数据: cls.tblName="Tablename" '表名 cls.fldName="Id" '排序关键字段 cls.PageIndex=Request("P")*1 '当前页码 cls.PageSize=20 '每页列数 cls.OrderType=1 '排序方式,0 、1 cls.strWhere=StrW '查询条件,不带Where cls.ListUrl="?Y="&Y&"&M="&M&"&D="&D&"&Sn="&Sn&"&P=" 分页URL Set Rs=cls.Result do while not rs.eof rs.movenext loop 分页数据 cls.page 在原文的使用说明中,在翻页代码中对表查询默认是全部字段也就是*,这样是不是会浪费资源,而无法查询需要的字段,于是我在DLL代码中新加入一个变名为zdName,作为传递可控制查询条件的变,同时在SQL存储过程中也加入相应的接受变@zdName 字符型。 在这个小问题解决后,又在使用上发现cls.strWhere付给它的变StrW 如果条件变其中带有类似 例如 a='b'则执行SQL存储过程时候会提示错误,后来发现是DLL代码中: sql = "exec GetList " & tblName & "," & fldName & "," & PageSize & "," & PageIndex & "," & OrderType & ",'" & strWhere & "' " 这个地方是否写的不够严谨,在StrW中如果含有单引,那么将无法执行,所以我在DLL的VB代码改成 If InStr(strWhere, "'") 0 Then sql = "exec GetList " & tblName & "," & fldName & "," & PageSize & "," & PageIndex & "," & OrderType & ",""" & strWhere & """ " Else sql = "exec GetList " & tblName & "," & fldName & "," & PageSize & "," & PageIndex & "," & OrderType & ",'" & strWhere & "' " End If 试了试目前的问题确实解决了,这个组件我也是刚刚使用,希望对大家能有点帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值