帮我看一下一个存储过程的问题![UP有分]

cjzlxy 2005-04-17 10:24:13
将下面存储过程考到您机子上帮我测试一下.
我用70万条数据做的测试,发现SQLServer占据内存135M,太夸张了.当我把******中间的代码注释掉后,SQLServer只站内存30M左右.什么原因啊???

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO


-- 获取指定页的数据

ALTER PROCEDURE sp_pagination

@tblName varchar(255), -- 表名

@strGetFields varchar(1000) = '*', -- 需要返回的列

@fldName varchar(255)='', -- 排序的字段名

@PageSize int = 10, -- 页尺寸

@PageIndex int = 1, -- 页码

@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序

@strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)

AS

declare @strSQL varchar(5000) -- 主语句

declare @strTmp varchar(110) -- 临时变量

declare @strOrder varchar(400) -- 排序类型




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 != ''

set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from ["

+ @tblName + "] where [" + @fldName + "]" + @strTmp + "(["

+ @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["

+ @fldName + "] from [" + @tblName + "] where " + @strWhere + " "

+ @strOrder + ") as tblTmp) and " + @strWhere + " " + @strOrder

end

--end

--以下代码的意思是返回记录总数。

--***************

if @strWhere !=''

set @strSQL = "select count(*) as _Total from [" + @tblName + "] where "+@strWhere+@strSQL

else

set @strSQL = "select count(*) as _Total from [" + @tblName + "]"+@strSQL


--*************


--else

--begin

exec (@strSQL)






GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

...全文
73 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cjzlxy 2005-04-26
  • 打赏
  • 举报
回复
算了.还时揭帖吧.
cjzlxy 2005-04-26
  • 打赏
  • 举报
回复
郁闷啊...
现在CSDN回帖越来越少了...
cjzlxy 2005-04-17
  • 打赏
  • 举报
回复
回复楼上:
用count(列)效果也一样.
  • 打赏
  • 举报
回复
count(*)----》不要用*用一个列值

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧