日期:2014-05-18  浏览次数:20589 次

SQL 通用分页 高手请帮忙修正
CREATE   PROCEDURE   pagination3
@tblName   varchar(255),   --   表名
@strGetFields   varchar(1000)   =   ' '* ' ',   --   需要返回的列
@fldName   varchar(255)= ' ' ' ',   --   排序的字段名
@PageSize   int   =   10,   --   页尺寸
@PageIndex   int   =   1,   --   页码
@doCount   bit   =   0,   --   返回记录总数,   非   0   值则返回
@OrderType   bit   =   0,   --   设置排序类型,   非   0   值则降序
@strWhere   varchar(1500)   =   ' ' ' '   --   查询条件   (注意:   不要加   where)
AS
declare   @strSQL   varchar(5000)   --   主语句
declare   @strTmp   varchar(110)   --   临时变量
declare   @strOrder   varchar(400)   --   排序类型
if   @doCount   !=   0
begin
if   @strWhere   != ' ' ' '
set   @strSQL   =   "select   count(*)   as   Total   from   [ "   +   @tblName   +   "]   where   "+@strWhere
else
set   @strSQL   =   "select   count(*)   as   Total   from   [ "   +   @tblName   +   "] "
end   以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况:

else
begin
if   @OrderType   !=   0
begin
set   @strTmp   =   " <(select   min "
set   @strOrder   =   "   order   by   [ "   +   @fldName   + "]   desc "如果@OrderType不是0,就执行降序,这句很重要!

end
else
begin
set   @strTmp   =   "> (select   max "
set   @strOrder   =   "   order   by   [ "   +   @fldName   + "]   asc "
end
if   @PageIndex   =   1
begin
if   @strWhere   !=   ' ' ' '
set   @strSQL   =   "select   top   "   +   str(@PageSize)   + "   "+@strGetFields+   "
from   [ "   +   @tblName   +   "]   where   "   +   @strWhere   +   "   "   +   @strOrder
else
set   @strSQL   =   "select   top   "   +   str(@PageSize)   + "   "+@strGetFields+   "
from   [ "+   @tblName   +   "]   "+   @strOrder如果是第一页就执行以上代码,这样会加快执行速度

end
else
begin以下代码赋予了@strSQL以真正执行的SQL代码 

set   @strSQL   =   "select   top   "   +   str(@PageSize)   + "   "+@strGetFields+   "   from   [ "
+   @tblName   +   "]   where   [ "   +   @fldName   +   "] "   +   @strTmp   +   "([ "+   @fldName   +   "])
from   (select   top   "   +   str((@PageIndex-1)*@PageSize)   +   "   [ "+   @fldName   +   "]
from   [ "   +   @tblName   +   "] "   +   @strOrder   +   ")   as   tblTmp) "+   @strOrder
if   @strWhere   !=