怎么样不用从从表中取出前N条记录?
因为不技术加Top 后面 加参数,所以不能直接用Top @top 来记取前@top条记录.
所以想了个办法,基本实现原理就是,先根据业务情况定一个较大值,用来先把表中的前N记录读取出来.放在一个临时表中.再从已经取出来的N条记录中筛选出真正要返回的前@top条记录:
详细代码:
--查找表的前@top条记录章集合
CREATEPROCdbo.usp_TableName_GetTop
(
@topint--要读取的记录数
)
AS
--存放第一次读取的前100记录的临时表
CREATETABLE#TemAllRecord
(
IndexIDintIDENTITY(1,1)NOTNULL,--标识列
RecordIDbigint
)
--存放真正要读取的前@top条记录
CREATETABLE#TemTopRecord
(
IndexIDintIDENTITY(1,1)NOTNULL,--标识列
RecordIDbigint
)
--读出前100条记录写入临时表#TemAllRecord
INSERTINTO
#TemAllRecord(RecordID)
SELECTTOP100
[RecordID]
FROM
TableName
--从临时表#TemAllRecord读出真正需要的前@top条记录
INSERTINTO
#TemTopRecord(RecordID)
SELECT
[RecordID]
FROM
#TemAllRecord
WHERE
[IndexID]<=@top--关键点,通过标识列值来选择数量
SELECT
*
FROM
TableNamet,#TemTopRecordr
WHERE
t.RecordID=r.RecordID
GO
CREATEPROCdbo.usp_TableName_GetTop
(
@topint--要读取的记录数
)
AS
--存放第一次读取的前100记录的临时表
CREATETABLE#TemAllRecord
(
IndexIDintIDENTITY(1,1)NOTNULL,--标识列
RecordIDbigint
)
--存放真正要读取的前@top条记录
CREATETABLE#TemTopRecord
(
IndexIDintIDENTITY(1,1)NOTNULL,--标识列
RecordIDbigint
)
--读出前100条记录写入临时表#TemAllRecord
INSERTINTO
#TemAllRecord(RecordID)
SELECTTOP100
[RecordID]
FROM
TableName
--从临时表#TemAllRecord读出真正需要的前@top条记录
INSERTINTO
#TemTopRecord(RecordID)
SELECT
[RecordID]
FROM
#TemAllRecord
WHERE
[IndexID]<=@top--关键点,通过标识列值来选择数量
SELECT
*
FROM
TableNamet,#TemTopRecordr
WHERE
t.RecordID=r.RecordID
GO
本文地址:http://www.45fan.com/a/question/68246.html