2

呼び出されたreturnparamを持つストアドプロシージャがCountあり、次のSQLで構成されているとします。

with temp as
(
    SELECT ROW_NUMBER() OVER( ORDER BY o.createDate) as rowNum,
           o.orderId
    FROM Orders as o

)
SELECT * FROM temp where rowNum BETWEEEN 10 and 20
SELECT @Count = COUNT(*) FROM Temp

Temp現在、最初の選択後になくなったため、これは壊れます。戻りパラメーターの値をCTEの行の総数に設定し、10から20までの行 を返すことは可能ですか?

一時テーブルを使用してこれを実行する必要があるかもしれないと思っていますが、CTEを使用して実行できるかどうか知りたいです。

4

2 に答える 2

4

値を直接tempに入れることができます:

with temp as
(
    SELECT ROW_NUMBER() OVER( ORDER BY o.createDate) as rowNum,
           count(*) over () as cnt,
           o.orderId
    FROM Orders as o

)
SELECT * FROM temp where rowNum BETWEEEN 10 and 20

その後、すべての行でcntを読み取ることができます。

于 2013-01-09T01:32:32.127 に答える
1

残念ながら、あなたはあなたがやろうとしていることをすることができません。Gordonの答えは、変数に値を返さないことを除いて、受け入れられます。

あなたは根本的な問題に直面しています。CTEは、その後に1つのクエリのみを許可します。

一時テーブルまたはテーブル変数が唯一の方法です。次のように、CTEの外でテーブルを再度追跡して変数を返す場合を除いて、次のようになります。

with temp as
(
    SELECT ROW_NUMBER() OVER( ORDER BY o.createDate) as rowNum,
           o.orderId
    FROM Orders as o
)
SELECT * FROM temp where rowNum BETWEEEN 10 and 20
SELECT @Count = COUNT(*) FROM Orders
于 2013-01-09T02:55:22.317 に答える