Как сделать SELECT TOP @Param в хранимой процедуре? - PullRequest
41 голосов
/ 23 апреля 2009

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

SELECT TOP @NumberOfResultsToReturn *

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

Ответы [ 6 ]

101 голосов
/ 23 апреля 2009

Добавить скобки:

SELECT TOP (@NumberOfResultsToReturn) *
3 голосов
/ 23 апреля 2009

SQL Server: введите аргумент в скобках:

SELECT TOP (@NumberOfResultsToReturn) *
2 голосов
/ 23 апреля 2009

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

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

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

1 голос
/ 23 апреля 2009

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

РЕДАКТИРОВАТЬ Или вы можете использовать скобки ... о которых я не знал в то время :) Спасибо, ребята.

1 голос
/ 23 апреля 2009

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

0 голосов
/ 23 апреля 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...