【发布时间】:2009-04-22 20:45:31
【问题描述】:
我正在尝试在 proc 中执行以下操作,但遇到不正确的语法错误:
SELECT TOP @NumberOfResultsToReturn *
我在这里做错了什么?谢谢。
【问题讨论】:
标签: sql stored-procedures
我正在尝试在 proc 中执行以下操作,但遇到不正确的语法错误:
SELECT TOP @NumberOfResultsToReturn *
我在这里做错了什么?谢谢。
【问题讨论】:
标签: sql stored-procedures
加括号:
SELECT TOP (@NumberOfResultsToReturn) *
【讨论】:
SQL Server:将参数放在括号中:
SELECT TOP (@NumberOfResultsToReturn) *
【讨论】:
这是我过去的做法:
SET @@ROWCOUNT = @NumberOfResultsToReturn
SELECT ........
SET @@ROWCOUNT = 0
这会起作用,尽管如果您使用支持此语法的 SQL 服务器,SELECT TOP (@NumberOfResultsToReturn) 更可取:
【讨论】:
这在 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 的括号技巧,也谢谢大家,!!!
【讨论】: