标题:[原创]优秀的百万级数据分页存储过程代码(ver2.0)
只看楼主
slfyeye
Rank: 1
来 自:上海
等 级:新手上路
威 望:1
帖 子:163
专家分:0
注 册:2006-3-5
得分:0 

我得细细分析一下,还不大懂存储过程。


2007-10-26 13:52
gupiao175
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:40
帖 子:1787
专家分:7527
注 册:2007-6-27
得分:0 

楼主已经写了升级版本了吗?

顶个,继续关注支持!


Q:1428196631,百度:开发地 即可找到我,有事请留言!
2007-10-27 12:37
gupiao175
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:40
帖 子:1787
专家分:7527
注 册:2007-6-27
得分:0 
喜欢存储过程的朋友们继续关注吧!

楼主在存储过程这方面的实力确实高过我们一般人,深有体会!

Q:1428196631,百度:开发地 即可找到我,有事请留言!
2007-10-27 12:38
中国男孩
Rank: 1
等 级:新手上路
帖 子:291
专家分:7
注 册:2006-3-19
得分:0 
顶一下

我很想把计算机学好!!
2007-10-27 12:59
yep
Rank: 1
来 自:河北
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-10-7
得分:0 

好东西,要顶顶啊

2007-10-27 17:05
tianyu123
Rank: 1
等 级:新手上路
威 望:2
帖 子:576
专家分:0
注 册:2007-8-26
得分:0 
学习。。。

改变一切,须从改变观念开始!
2007-10-27 18:50
colorthewind
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-7-30
得分:0 
学习过程中,回头试下效果再探探
2007-10-27 23:54
绿色的童年
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-9-27
得分:0 
不错。。精典!~
2007-11-14 12:29
zhongx
Rank: 2
等 级:论坛游民
威 望:1
帖 子:370
专家分:42
注 册:2007-8-16
得分:0 
DDDDDD

感动常在,每天进步一点点,开心学习在编程论坛。
http://www.
2007-11-14 21:13
purana
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
得分:0 

感觉你写的存储过程比较简单.
效率就不知道了.因为我没有百万级的数据库.
我也写了一个简单的存储过程.

[CODE]IF EXISTS(SELECT * FROM dbo.SYSOBJECTS WHERE ID=OBJECT_ID(N'[GetRecordFromPage]') AND
OBJECTPROPERTY(ID,N'IsProcedure')=1)
DROP PROC dbo.[GetRecordFromPage]
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE PROC GetRecordFromPage
@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)='' --排序条件
AS
BEGIN
DECLARE @str VARCHAR(5000)
DECLARE @temp VARCHAR(120)
DECLARE @strOrder VARCHAR(400)

IF @doCount!=0
BEGIN
IF @strWhere!=''
SET @str='SELECT COUNT(1) AS Total FROM ['+@tblName+'] WHERE '+@strWhere
ELSE
SET @str='SELECT COUNT(1) AS Total FROM ['+@tblName+']'
END
ELSE
BEGIN
IF @orderType!=0
BEGIN
SET @temp='<=(SELECT MIN'
SET @strOrder=' ORDER BY ['+@fldName+'] DESC'
END
ELSE
BEGIN
SET @temp='>=(SELECT MAX'
SET @strOrder=' ORDER BY ['+@fldName+'] ASC'
END
IF @pageIndex > 1
BEGIN
IF @strWhere=''
SET @str='SELECT TOP '+CAST(@pageSize AS VARCHAR)+' '+@strGetFields+' FROM ['
+@tblName+'] WHERE ['+@fldName+'] '+@temp+'(['
+@fldName+']) FROM (SELECT TOP '+CAST((@pageIndex-1)*@pageSize AS VARCHAR)+' ['
+@fldName+'] FROM ['+@tblName+'] '
+@strOrder+') AS tblTEMP) '+@strOrder
ELSE
SET @str='SELECT TOP '+CAST(@pageSize AS VARCHAR)+' '+@strGetFields+' FROM ['
+@tblName+'] WHERE ['+@fldName+']'+@temp+' (['
+@fldName+']) FROM (SELECT TOP '+CAST((@pageIndex-1)*@pageSize AS VARCHAR)+' ['
+@fldName+'] FROM ['+@tblName+'] WHERE '+@strWhere+' '
+@strOrder+') AS tblTEMP) AND '+@strWhere+' '+@strOrder
END
ELSE
BEGIN
IF @strWhere=''
SET @str='SELECT TOP '+CAST(@pageSize AS VARCHAR)+' '+@strGetFields+' FROM ['
+@tblName+'] '+@strOrder
ELSE
SET @str='SELECT TOP '+CAST(@pageSize AS VARCHAR)+' '+@strGetFields+' FROM ['
+@tblName+'] WHERE '+@strWhere+' '+@strOrder
END
END
--执行SQL
EXEC (@str)
--PRINT @str
END
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO[/CODE]


我的msn: myfend@
2007-11-14 21:43



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-180627-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.241663 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved