首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

求SQL2005高性能存储过程分页代码,该怎么处理

2012-03-09 
求SQL2005高性能存储过程分页代码求sql2005高性能存储过程分页代码及调用代码前辈们小弟刚入行 请写注释 !

求SQL2005高性能存储过程分页代码
求sql2005高性能存储过程分页代码及调用代码 
前辈们 
小弟刚入行 请写注释 !
谢谢!

数据大概在6-8万条左右 峰值在 14万左右 谢谢啦

ASP.NET

[解决办法]
才14W的数据有什么好怕的!

SQL code
CREATE PROCEDURE  dbo.f_page(@pagesize int,@pageindex int,@docount bit,@argcode varchar(100),@argtable varchar(100),@order varchar(100),@where varchar(500),@counts  int = 1 output) AS BEGIN TRANSACTIONSET NOCOUNT ON IF(@docount=1)      BEGIN        DECLARE @sqlStr Varchar(4000)         SET @sqlStr='SELECT COUNT('+@argcode+') FROM '+@argtable+' WHERE ' + @where         EXEC(@sqlStr)    ENDELSE      BEGIN         CREATE TABLE #indextable(id bigint identity(1,1),nid bigint)        DECLARE @PageLowerBound int        DECLARE @PageUpperBound int        DECLARE @sqlStr4 nvarchar(4000)         DECLARE @sqlStr1 Varchar(4000)         DECLARE @sqlStr2 Varchar(4000)         DECLARE @sqlStr3 Varchar(4000) DECLARE @a1 varchar(100)DECLARE @a2 varchar(100)         SET @PageLowerBound=(@pageindex-1)*@pagesize        SET @PageUpperBound=@PageLowerBound+@pagesize        SET ROWCOUNT @PageUpperBoundset @a1=@PageLowerBoundset @a2=@PageUpperBound       set @sqlstr3='AND t.id>'+@a1+' AND t.id<='+@a2        SET @sqlStr1='INSERT INTO #indextable(nid) SELECT '+@argcode+' FROM '+@argtable+'  WHERE ' + @where  + '  ORDER BY  ' + @order         EXEC(@sqlStr1)        SET @sqlstr2=' SELECT * FROM '+@argtable+',#indextable t WHERE '+@argcode+' =t.nid  '+@sqlstr3+'  ORDER BY t.id'        SET @sqlStr4='SELECT @counts=COUNT('+@argcode+') FROM '+@argtable+' WHERE ' + @where         exec sp_executesql @sqlStr4,N'@counts int out ',@counts out        Exec (@sqlstr2)    ENDSET NOCOUNT OFFCOMMIT TRANSACTIONGO
[解决办法]
SQL code
ALTER PROCEDURE [dbo].[Pg_Paging]@Tables varchar(1000), --表名,多红表是请使用 tA a inner join tB b On a.AID = b.AID@PK varchar(100),    --主键,可以带表头 a.AID@Sort varchar(200) = '', --排序字段@PageNumber int = 1,    --开始页码@PageSize int = 10,        --页大小@Fields varchar(1000) = '*',--读取字段@Filter varchar(1000) = NULL,--Where条件@Group varchar(1000) = NULL,  --分组@isCount bit = 0     --1    --是否获得总记录数AS----select * from GL_NEWS order by GN_UPDATE_DATE DESC--exec Pg_Paging @Tables = 'tb_NewsInfo', @PK = 'News_ID', @Sort = 'News_ID DESC', @PageNumber = 2, @PageSize = 15,@Fields = '*', @Group = '', @isCount = 0DECLARE @strFilter varchar(2000)declare @sql varchar(8000)IF @Filter IS NOT NULL AND @Filter != ''  BEGIN   SET @strFilter = ' WHERE ' + @Filter + ' '  ENDELSE  BEGIN   SET @strFilter = ''  ENDif @isCount = 1 --只获得记录条数    begin        set @sql = 'SELECT  Count(*) FROM ' + @Tables + @strFilter      endelsebeginif @Sort = ''  set @Sort = @PK + ' DESC 'IF @PageNumber < 1  SET @PageNumber = 1if @PageNumber = 1 --第一页提高性能begin   set @sql = 'select top ' + str(@PageSize) +' '+@Fields+ '  from ' + @Tables + ' ' + @strFilter + ' ORDER BY  '+ @Sortend else  begin  /**//**//**//*Execute dynamic query*/       DECLARE @START_ID varchar(50)DECLARE @END_ID varchar(50)SET @START_ID = convert(varchar(50),(@PageNumber - 1) * @PageSize + 1)SET @END_ID = convert(varchar(50),@PageNumber * @PageSize)    set @sql =  ' SELECT '+@Fields+ '   FROM (SELECT ROW_NUMBER() OVER(ORDER BY '+@Sort+') AS rownum,      '+@Fields+ '      FROM '+@Tables+') AS D   WHERE rownum BETWEEN '+@START_ID+' AND ' +@END_ID +' ORDER BY '+@Sort  ENDEND--print @sqlEXEC(@sql) 

热点排行
Bad Request.