关于SQL Server存储过程参数

时间:2012-05-08 06:56:14

标签: sql sql-server

我想分割页面,但是下面的存储过程是错误的,因为使用@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 个答案:

答案 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。