不用游标从表中取出前N条记录的存储过程
2006-12-09 23:39
281 查看
因为不技术加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
所以想了个办法,基本实现原理就是,先根据业务情况定一个较大值,用来先把表中的前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
相关文章推荐
- 不用游标从表中取出前N条记录的存储过程
- 如何删除一个表中重复的记录? 、、游标,存储过程的使用
- 在SqlServer存储过程中使用Cursor(游标)操作记录
- 在SqlServer存储过程中使用Cursor(游标)操作记录
- SqlServer存储过程中使用Cursor(游标)操作记录
- 存储过程查询一张表中记录是否连续、重复并且取出对应的数据
- 在SqlServer存储过程中使用Cursor(游标)操作记录
- mysql 存储过程结合游标修改每一行记录的值
- 存储过程查询一张表中记录是否连续、重复并且取出对应的数据
- 表中取出第 n 条到第 m 条的记录及相应的存储过程
- 通用存储过程.分页存储过程..返回指定返回条数、指定页数的记录
- C#调用Oracle带有out游标参数存储过程的问题
- 存储过程之游标笔记小结
- 不用存储实现的分页,效率和存储过程一样。
- 一个完整的存储过程(系统游标)
- Oracle 隐式游标 存储过程
- mysql 存储过程中 使用变量做表明[学习记录]
- oracle中建表、游标、存储过程的使用方法入门
- ORACLE—010:调用有游标参数的存储过程
- 最重要的也是最实用的(oracle运用存储过程嵌套游标来实现分页)