-
- 可以依据任何字段进行排序并分页的存储过程(z)
- Weather:阴 ,南风 4-5级 ,最高气温1 ℃
- 2006-02-28
之前用过的一些存储过程分页
大多数都只能根据主键排序,可是实际上,我们经常需要依据非主键排序并分页,比如,按工资大小
下面的代码能完成工作
ALTER PROCEDURE dbo.GetPageRecord
(
@tblName varchar(255), -- 表名
@fldName varchar(255), --排序字段
@KeyField varchar(255), --主键
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@IsCount bit = 0, -- 返回记录总数, 非 0 值则返回
@OrderType bit = 1, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(4000) = '' -- 查询条件 (注意: 不要加 where)
)
AS
SET NOCOUNT ON
DECLARE @PageLowerBound int
DECLARE @PageUpperBound int
-- Set the page bounds
SET @PageLowerBound = @PageSize * @PageIndex
SET @PageUpperBound = @PageLowerBound + @PageSize + 1
-- Create a temp table to store the select results
CREATE TABLE #tmp
(
RecNo int IDENTITY (1, 1) NOT NULL,
oldid int
)
--generate record
Declare @Sqlstr varchar(6000)
set @sqlstr='select '+@Keyfield+' from '+@tblname
if(@strWhere<>'')
begin
set @Sqlstr=@sqlstr+' where ('+@strWhere+')'
end
set @sqlstr=@sqlstr+' order by '+@fldName
if(@ordertype=0)
begin
set @sqlstr=@sqlstr+' asc'
end
else
begin
set @sqlstr=@sqlstr+' desc'
end
set @sqlstr='insert into #tmp (oldid) '+@sqlstr
execute(@sqlstr)
set @sqlstr='SELECT TableA.* FROM '+@tblname+' TableA (nolock), #tmp T WHERE T.oldid = TableA.'+@keyfield+' AND T.RecNo > '+ cast(@PageLowerBound as varchar)+' AND T.RecNo < '+cast(@PageUpperBound as varchar)+' ORDER BY T.RecNo'
execute(@sqlstr) 原文地址:http://heroman.cnblogs.com/archive/2004/12/08/74333.html-
Views(5125) | Comments(11) |
In:
web develop
|
(02/27)
22岁mm vs 28岁mm
三星YH-J70到手,真机秀啦
(03/07)
[可以依据任何字段进行排序并分页的存储过程(z)]的回复
-
某些人
于
2006-03-01 11:03:51
发表 |
IP:210.22.166.*
- 不错不错。测试private String
-
柠檬园主
于
2006-03-02 10:25:51
发表 |
IP:59.44.76.*
- 差点没让那些老外恶心死,天天来发垃圾回复,呵呵,这下好了
-
forestagn
于
2006-03-02 12:38:05
发表 |
IP:220.114.249.*
这个文章我也看不懂啊
借此祝贺3rgb首页获的pr值为5,不错啊.
- 4# 柠檬园主 于 2006-03-02 13:03:17 发表 | IP:59.44.76.*
多谢老大哥捧场,哈哈哈,偶也是今天刚发现变成PR5了,前两天偶而出现过5,但刷一刷就变成4了,今天刷了好几下都没变。哈哈,看来是成功升值啦

- 5# 秦歌 于 2006-03-04 01:06:36 发表 | IP:61.51.148.*
- http://www.google.com/search?hl=zh-TW&q=%E6%AA%B8%E6%AA%AC%E7%9A%84%E6%A8%A3%E5%AD%90&btnG=Google%20%E6%90%9C%E5%B0%8B&lr=
- 6# 柠檬园主 于 2006-03-06 22:52:45 发表 | IP:218.61.195.*
- 晕死,干什么呐~~
- 7# joe 于 2006-03-07 21:07:02 发表 | IP:218.80.141.*
- 对没有索引的字段进行排序速度不容乐观。
- 8# 柠檬园主 于 2006-03-07 21:58:25 发表 | IP:221.201.156.*
- 终于有个以文对题的了,不索引乱排序肯定是不行的了,作者其实主要是实现了可以自定字段,具体使用就得看DBA的了,一个表的搜索条件要多样化的话,就得多建几个索引,我在一个表中就建了4年索引,而主键我用的GUID,虽然默认索引了,但实际上这个索引没用得上。
- 9# joe 于 2006-03-08 22:51:58 发表 | IP:218.80.141.*
- 如果一个表更新较频繁,且索引过多,很容易造成死锁。
- 10# 柠檬园主 于 2006-03-09 09:12:38 发表 | IP:210.83.202.*
- 问题是,如果不经常更新,除了像IP地址库这样的东西外,也没到数据要多到用索引啊。矛盾了不是?呵呵
- 11# joe 于 2006-03-11 16:13:26 发表 | IP:218.80.141.*
- 因此数据库设计也是一门艺术。
