不用游标从表中取出前N条记录的存储过程

因为不技术加Top 后面 加参数,所以不能直接用Top @top 来记取前@top条记录.

所以想了个办法,基本实现原理就是,先根据业务情况定一个较大值,用来先把表中的前N记录读取出来.放在一个临时表中.再从已经取出来的N条记录中筛选出真正要返回的前@top条记录:

详细代码:

 

--  查找表的前@top条记录章集合
CREATE   PROC  dbo.usp_TableName_GetTop
(
    
@top   int          --  要读取的记录数
)
AS

--  存放第一次读取的前100记录的临时表
CREATE   TABLE  #TemAllRecord
(
    IndexID 
int   IDENTITY  ( 1 1 NOT   NULL -- 标识列
    RecordID  bigint
)

--  存放真正要读取的前@top条记录
CREATE   TABLE  #TemTopRecord
(
    IndexID 
int   IDENTITY  ( 1 1 NOT   NULL -- 标识列
    RecordID  bigint
)

--  读出前100条记录写入临时表#TemAllRecord
INSERT   INTO  
#TemAllRecord(RecordID)
SELECT   TOP   100
[ RecordID ]
FROM
TableName

--  从临时表#TemAllRecord读出真正需要的前@top条记录
INSERT   INTO  
#TemTopRecord(RecordID)
SELECT
[ RecordID ]
FROM
#TemAllRecord
WHERE
[ IndexID ]   <=   @top      --  关键点,通过标识列值来选择数量


SELECT
*
FROM
TableName t,#TemTopRecord r
WHERE
t.RecordID 
=  r.RecordID

GO
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值