存储过程问题

lgzly 2006-08-20 10:39:22
我想写一个存储过程:查询某个表中第5行到第N行的记录,但表中没有ID这么一个字段
...全文
139 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
fxf66 2006-08-21
  • 打赏
  • 举报
回复
可以定义一个游标,定义一个计数器
打开游标,每fetch一次,计数器加1
到了你想要更新的记录时, update table set ... where current of 游标名字

如果你要从5万条数据之后才开始更新,那效率就...哈哈
guan0616 2006-08-21
  • 打赏
  • 举报
回复
借下楼上的数据
CREATE TABLE TB_TEST
(
FCOUNT INT NOT NULL
);

--初始化数据
DECLARE @I INT
SET @I=1
WHILE(@I<500)
BEGIN
INSERT INTO TB_TEST VALUES (@I)
SET @I=@I+1
END
select * from tb_test

create proc n_5

@a int
as
select identity(int,1,1) a, tb_test.* into #t from tb_test
select * from #T where a between 5 and @a
select * from #t

exec n_5 20
wisdomone 2006-08-21
  • 打赏
  • 举报
回复
先对你的表某一属性建一个索引,
然后用
ALTER TABLE TABLENAME ADD INDEX IX ON(FIELD)
SELECT TOP N-5 *
FROM TABLENAME AS A
WHERE FIELD NOT IN
(SELECT TOP 4 FIELD
FROM TABLENAME
WHERE FIELD=A.FIELD)
ORDER BY FIELD
enterala 2006-08-21
  • 打赏
  • 举报
回复
用CURSOR是正道:P
Eric1006 2006-08-20
  • 打赏
  • 举报
回复
--创建测试数据表
CREATE TABLE TB_TEST
(
FCOUNT INT NOT NULL
);

--初始化数据
DECLARE @I INT
SET @I=1
WHILE(@I<500)
BEGIN
INSERT INTO TB_TEST VALUES (@I)
SET @I=@I+1
END

--获取从第5至第20记录
SELECT FCOUNT,IDENTITY(INT,1,1) AS FID INTO #TB_TEST FROM TB_TEST

SELECT TOP 16 FCOUNT FROM #TB_TEST WHERE FID IN (SELECT TOP 20 FID FROM #TB_TEST ORDER BY FID ASC) ORDER BY FID DESC

DROP TABLE #TB_TEST
achongsky 2006-08-20
  • 打赏
  • 举报
回复
主键有吗?
select * from table where 主键 not in (select top 5 主键 from table)

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧