我想分割页面,但是下面的存储过程是错误的,因为使用@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
答案 0 :(得分:1)
将变量括在括号中,例如:
declare @i int
set @i = 1
select top (@i) * from sys.tables
答案 1 :(得分:0)
那是因为TOP
需要一个常数值。但是,您可以使用SET ROWCOUNT
,请参阅SET ROWCOUNT (Transact-SQL)。
答案 2 :(得分:0)
你不能这样做:
SELECT * from
......
WHERE RowNumber BETWEEN @size*(@page-1) AND @size*(@page)
答案 3 :(得分:0)
如果您使用的是SQL Server 2005或更高版本,则可以使用RowNumber。对于早期版本的SQL Server,您可以设置RowCount。