如何做一个存储过程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的括号技巧,谢谢你们!