如何在存储过程中选择SELECT TOP @Param?

时间:2009-04-22 20:45:32

标签: sql stored-procedures

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

SELECT TOP @NumberOfResultsToReturn *

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

6 个答案:

答案 0 :(得分:101)

添加括号:

SELECT TOP (@NumberOfResultsToReturn) *

答案 1 :(得分:3)

SQL Server:将参数放入parens:

SELECT TOP (@NumberOfResultsToReturn) *

答案 2 :(得分:2)

以下是我过去的做法:

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

这会有效,但如果您使用支持此语法的SQL服务器,则SELECT TOP (@NumberOfResultsToReturn)更可取:

答案 3 :(得分:1)

SQL Server 2005及更高版本支持此功能,但SQL Server 2000不支持。您使用的是哪个版本?

答案 4 :(得分:1)

您可能必须使用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;

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

答案 5 :(得分:0)

我担心你不能在SQL 2000中这样做,但你可以尝试构建查询

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

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