提取第N页的30条记录怎么写?

fengyun15 2004-06-27 11:35:21
从publish 表中取出第 n 条到第 m 条的记录,可以这样写:
SELECT TOP m-n+1 *
FROM publish
WHERE (id NOT IN
     (SELECT TOP n-1 id
     FROM publish))


但现在我要从第N页(每页30条记录)开始提取前30条记录,于是我就理所当然的这样写:
SELECT TOP 30 *
FROM publish
WHERE (id NOT IN
     (SELECT TOP (N-1)*30 id
     FROM publish))

可数据库总提示出错,现在我想,大概是*在这里即是乘号,又是代表全部的意思,所以数据库出错了。
我应该怎么办?
...全文
100 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengyun14 2004-09-27
  • 打赏
  • 举报
回复
用“铁拳”的存储过程吧!
YanJD 2004-06-29
  • 打赏
  • 举报
回复
--通用的选择数据存储过程
CREATE Procedure dbo.SelectData
( @TableName sysname, --表名称
@StartRow int=1, --起始记录号
@RowCount int=5, --记录数
@FieldList nvarchar(4000)='*' --用','分隔的字段列表
)
AS
DECLARE @SQL nvarchar(800)
SET @SQL = 'SELECT Top ' + CAST(@RowCount AS nvarchar(12)) + ' ' + @FieldList + ' FROM [' + @TableName + '] WHERE (Id NOT IN (SELECT TOP ' + CAST((@StartRow - 1) AS nvarchar(12)) + ' Id FROM [' + @TableName + '] ORDER BY Id))'
EXECUTE(@SQL)
GO
--省略ORDER BY Id在我的机器上会出现非预期结果,不知何故?!
BigGunLee 2004-06-28
  • 打赏
  • 举报
回复
就是(N-1)*30的问题
不能这么用.
解决的方法是你写个简单的存储过程
用变量代替
set @M=(@N-1)*30
SELECT TOP 30 *
FROM publish
WHERE (id NOT IN
     (SELECT TOP @M id
     FROM publish))

这样应该可以了

22,294

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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