web-dev-qa-db-ja.com

ストアドプロシージャでSELECT TOP @Paramを実行する方法

プロシージャで以下を実行しようとしていますが、不正な構文エラーが発生します。

SELECT TOP @NumberOfResultsToReturn *

ここで何が悪いのですか?ありがとう。

43
David

括弧を追加:

SELECT TOP (@NumberOfResultsToReturn) *
104
Chris Thornhill

SQL Server:引数を括弧で囲みます。

SELECT TOP (@NumberOfResultsToReturn) *
3
n8wrl

ここに私が昔それをしていた方法があります:

_SET @@ROWCOUNT = @NumberOfResultsToReturn
SELECT ........
SET @@ROWCOUNT = 0
_

これは機能しますが、次の構文をサポートするSQLサーバーを使用している場合はSELECT TOP (@NumberOfResultsToReturn)が推奨されます。

2
galets

これはSQL Server 2005以降ではサポートされていますが、SQL Server 2000ではサポートされていません。どのバージョンを使用していますか?

1
Joel Coehoorn

代わりに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 [〜#〜]または、括弧を使用することもできます...当時は知らなかった:)みんなありがとう。

1
TheTXI

SQL 2000ではこれを行うことはできませんが、クエリを作成してみることができます

DECLARE @query VARCHAR(500)
set @query = 'SELECT TOP ' + @NumberOfResultsToReturn + '* FROM table'
EXEC @query

私はSQL 2005の括弧のトリックを知りませんでした。