Как сделать SELECT TOP @Param в хранимой процедуре?

Я пытаюсь сделать следующее в proc, но получаю неправильную синтаксическую ошибку:

SELECT TOP @NumberOfResultsToReturn *

Что я здесь делаю неправильно? Спасибо.

Ответ 1

Добавить круглые скобки:

SELECT TOP (@NumberOfResultsToReturn) *

Ответ 2

SQL Server: поместите аргумент в parens:

SELECT TOP (@NumberOfResultsToReturn) *

Ответ 3

Вот как я это делал в старые времена:

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

Это будет работать, хотя SELECT TOP (@NumberOfResultsToReturn) предпочтительнее, если вы используете SQL-сервер, который поддерживает этот синтаксис:

Ответ 4

Это поддерживается в SQL Server 2005 и более поздних версиях, но не в SQL Server 2000. Какую версию вы используете?

Ответ 5

Возможно, вам придется использовать метод 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;

EDIT Или вы можете использовать круглые скобки... которые я в то время не знал:) Спасибо, ребята.

Ответ 6

Я боюсь, что вы не можете сделать это в SQL 2000, но вы можете попытаться построить запрос

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

Я не знал сводку для SQL 2005, спасибо, ребята,!!!