我爱电脑技术论坛's Archiver

star2008 发表于 2008-7-2 09:15

最简单的SQL Server数据库存储过程分页

最简单的SQL Server数据库存储过程分页: ?P3D1?'pa@A

W+b,b3^b!Y 1.只需要提供Sql语句和每页的记录数,页数就可以了 P}1Z~| nYH

7Z^7m.^ T 2,速度超快哟,100W记录1~3秒就分出来了 q4c!cC6O@

EB2`w0OE2p_:R"N | 3,对于存储过程特别好用 $U$Wq0T3I(e7K/iQ"M K

)c_ @ L)NBV-~ --//调用的方式
[ N0T4Y7}[y7@`~ q 5sBo4k_p-K

U+sz/ilR8nz|#^
X|H%oL'R} exec up_zbh_DivPageBySql 'select * from 表',10,3
,y af\m t'iq
}}2v,J D;S"W1y1H4b 存储过程 6mq!LV8Kxt X0@]1i
XX {,m5pd,z
exec up_zbh_DivPageBySql 'exec 存储过程',10,1 g,Tw0Za/p)z Bfs/J

y.G0E!AEGm%[M x3lEBMT,S
--//封装成一个存储过程,调用的时候方便的很哈!! d\2\n{

0Jz/y8b.G'pc create procedure up_zbh_DivPageBySql /x'n2}+z#V$M

,~$` H&j7Q$sSvq @strSql varchar(8000),
n LWR4C
)` Y IYE'NG XGs+N @nPageSize int,
[:MHk5Zv[5g
0E/o@0~-HPB KD @nPageCount int
*i| G.i"\Iq f Xay3D |*Z;B]
as
c4J^WNx W.JTv#_y
SET NOCOUNT ON
Wl{'m7O"F$f&Y i+]u'E|8@i
DECLARE @P1 INT,
"oWk)IlG:P5X +g}.`!w n)f6bf
@nRowCount INT 4|;J,X;x8M E'h6BVh

V{W$@"\7F6Y z5t6a8i|
--//注意:@scrollopt = 1 会取得Select的时候的总行数
:@nV,^6\g |1@0wv;j2s:mPlx
EXEC sp_cursoropen @P1 OUTPUT, @strSql, @scrollopt = 2, @ccopt = 335873, @rowcount = @nRowCount OUTPUT
$g5E8n?z?kS{]
e'Wi,~0vU9} :X2W x'zl
IF (@P1 != 0)
2d k+e8k"o ? i6F r#i[~w.Lb
BEGIN
%}J;~ t7j C !fn`ix
--SELECT @nRowCount AS nRecordCount, ceiling(1.0 * @nRowCount / @nPageSize) AS nPageCount, @nPageCount AS nPage
&Nw%[](@"c)HU
*o#}+g6_v$S:c SET @nPageCount = (@nPageCount - 1) * @nPageSize + 1
/S:R&N#Jj8h}-w!o
5{%A uKT'f:K~.xPB6qQ EXEC sp_cursorfetch @P1, 32, @nPageCount, @nPageSize q"\TTNS[ Ok.gH

YA W3C~nN6E EXEC sp_cursorclose @P1 $m+XE1?] r+lr6r
&aH.l}8RX([USQ
END
Q)KQ.f%@"cn"Q X-~(^{'?6^;t;zW
GO

页: [1]
   

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.