Я пытаюсь сделать следующее в proc, но получаю неправильную синтаксическую ошибку:
SELECT TOP @NumberOfResultsToReturn *
Что я здесь делаю неправильно? Спасибо.
Я пытаюсь сделать следующее в 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;
EDIT Или вы можете использовать круглые скобки... которые я в то время не знал:) Спасибо, ребята.
Я боюсь, что вы не можете сделать это в SQL 2000, но вы можете попытаться построить запрос
DECLARE @query VARCHAR(500)
set @query = 'SELECT TOP ' + @NumberOfResultsToReturn + '* FROM table'
EXEC @query
Я не знал сводку для SQL 2005, спасибо, ребята,!!!