如何做一个存储过程SELECT TOP @Param?
我正在尝试在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;
编辑或者你可以使用括号……我当时不知道:)谢谢你们。
恐怕你不能在SQL 2000中做到这一点,但你可以尝试构造查询
DECLARE @query VARCHAR(500) set @query = 'SELECT TOP ' + @NumberOfResultsToReturn + '* FROM table' EXEC @query
我不知道SQL 2005的括号技巧,谢谢你们!