如何做一个存储过程SELECT TOP @Param?

我正在尝试在proc中执行以下操作,但得到不正确的语法错误:

SELECT TOP @NumberOfResultsToReturn * 

我在这里做错了什么? 谢谢。

添加括号:

 SELECT TOP (@NumberOfResultsToReturn) * 

SQL Server:将参数放在parens中:

 SELECT TOP (@NumberOfResultsToReturn) * 

以前我是这么做的:

 SET @@ROWCOUNT = @NumberOfResultsToReturn SELECT ........ SET @@ROWCOUNT = 0 

这将工作,虽然SELECT TOP (@NumberOfResultsToReturn)是可取的,如果您使用SQL服务器,支持这种语法:

这在SQL Server 2005及更高版本中受支持,但在SQL Server 2000中不受支持。您使用的是哪个版本?

您可能不得不使用RowNumber()方法。

这里是一个例子:

 DECLARE @PageNum AS INT; DECLARE @PageSize AS INT; SET @PageNum = 2; SET @PageSize = 10; WITH OrdersRN AS ( SELECT ROW_NUMBER() OVER(ORDER BY OrderDate, OrderID) AS RowNum ,OrderID ,OrderDate ,CustomerID ,EmployeeID FROM dbo.Orders ) SELECT * FROM OrdersRN WHERE RowNum BETWEEN (@PageNum - 1) * @PageSize + 1 AND @PageNum * @PageSize ORDER BY OrderDate ,OrderID; 

编辑或者你可以使用括号……我当时不知道:)谢谢你们。

恐怕你不能在SQL 2000中做到这一点,但你可以尝试构造查询

 DECLARE @query VARCHAR(500) set @query = 'SELECT TOP ' + @NumberOfResultsToReturn + '* FROM table' EXEC @query 

我不知道SQL 2005的括号技巧,谢谢你们!