プロシージャで以下を実行しようとしていますが、不正な構文エラーが発生します。
SELECT TOP @NumberOfResultsToReturn *
ここで何が悪いのですか?ありがとう。
括弧を追加:
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;
[〜#〜] edit [〜#〜]または、括弧を使用することもできます...当時は知らなかった:)みんなありがとう。
SQL 2000ではこれを行うことはできませんが、クエリを作成してみることができます
DECLARE @query VARCHAR(500)
set @query = 'SELECT TOP ' + @NumberOfResultsToReturn + '* FROM table'
EXEC @query
私はSQL 2005の括弧のトリックを知りませんでした。