Tôi đang cố gắng để làm như sau trong một proc, nhưng nhận được một lỗi cú pháp không chính xác:Làm thế nào để thực hiện SELECT TOP @Param trong một thủ tục lưu trữ?
SELECT TOP @NumberOfResultsToReturn *
Tôi đang làm gì sai ở đây? Cảm ơn.
Tôi đang cố gắng để làm như sau trong một proc, nhưng nhận được một lỗi cú pháp không chính xác:Làm thế nào để thực hiện SELECT TOP @Param trong một thủ tục lưu trữ?
SELECT TOP @NumberOfResultsToReturn *
Tôi đang làm gì sai ở đây? Cảm ơn.
Add ngoặc:
SELECT TOP (@NumberOfResultsToReturn) *
Điều này được hỗ trợ trong SQL Server 2005 trở lên, nhưng không được hỗ trợ trong SQL Server 2000. Bạn đang sử dụng phiên bản nào?
SQL Server: Đặt tham số trong dấu ngoặc:
SELECT TOP (@NumberOfResultsToReturn) *
Bạn có thể phải sử dụng phương pháp RowNumber() để thay thế.
Dưới đây là một ví dụ:
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 Hoặc bạn có thể sử dụng dấu ngoặc ... mà tôi không hề biết về lúc :) Thanks guys.
Tôi sợ bạn không thể làm điều này trong SQL 2000, nhưng bạn có thể cố gắng để xây dựng các truy vấn
DECLARE @query VARCHAR(500)
set @query = 'SELECT TOP ' + @NumberOfResultsToReturn + '* FROM table'
EXEC @query
Tôi không biết lừa ngoặc cho SQL 2005, nhờ quá guys,! !!
Đây là cách tôi đã làm nó trong thời gian cũ:
SET @@ROWCOUNT = @NumberOfResultsToReturn
SELECT ........
SET @@ROWCOUNT = 0
này sẽ làm việc, mặc dù SELECT TOP (@NumberOfResultsToReturn)
là một lợi thế nếu bạn đang sử dụng SQL server có hỗ trợ cú pháp sau:
mát Tôi đã học được những điều mới mẻ bản thân mình, tôi đã nghĩ rằng nó sẽ yêu cầu sql động – HLGEM