0

我想分页,但是下面的存储过程是错误的,因为使用了@size,而正确的方法是如何完成这个存储过程

谢谢!!!

CREATE PROCEDURE message_devidepage
    @size int,
    @page int
AS
BEGIN
    SELECT TOP @size * from   --point out @size is wrong 
        (
        SELECT ROW_NUMBER() OVER (ORDER BY createTime desc) AS RowNumber,* FROM message
        ) ed
    WHERE RowNumber > @size*(@page-1);
END
GO
4

4 回答 4

1

将变量括在括号中,例如:

declare @i int
set @i = 1
select top (@i) * from sys.tables
于 2012-05-08T07:04:49.730 回答
0

那是因为TOP需要一个常数值。但是,您可以使用SET ROWCOUNTSET ROWCOUNT (Transact-SQL)

于 2012-05-08T07:02:01.617 回答
0

你不能这样做:

SELECT * from 
......
WHERE RowNumber BETWEEN @size*(@page-1) AND @size*(@page)
于 2012-05-08T07:02:17.927 回答
0

如果您使用的是 SQL Server 2005 或更高版本,则可以使用 RowNumber。对于早期版本的 SQL Server,您可以设置 RowCount。

于 2012-05-08T07:08:22.113 回答