SQL Serverでは、SET ROWCOUNT
を使用できます クエリによって返される行を制限します。
これが機能する方法は、指定された行数が返された後、SQLServerがクエリの処理を停止するようにすることです。
TOP()
に似ています 句ですが、SET ROWCOUNT
という違いがあります はクエリの外部に設定され、後続のすべてのクエリに影響します。
例
実例を示します。
まず、なしでクエリを実行しましょう ROWCOUNT
の設定 。
SELECT * FROM Dogs;
結果:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | | 2 | Fluffy | | 3 | Wag | | 1002 | Fetch | +---------+-----------+ (4 rows affected)
したがって、ROWCOUNT
を設定せずに4行が返されます 。
それでは、SET ROWCOUNT
を使用しましょう 行数を制限してから、クエリを再実行してください。
SET ROWCOUNT 2;
SELECT * FROM Dogs;
結果:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | | 2 | Fluffy | +---------+-----------+ (2 rows affected)
後続のクエリ
前述のように、SET ROWCOUNT
後続のすべてのクエリに影響します。
前のクエリの直後に次のクエリを実行すると、2つの行も返されます。
SELECT * FROM Cats;
結果:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 1 | Meow | | 2 | Fluffy | +---------+-----------+ (2 rows affected)
これは、SET ROWCOUNT
を使用しなかった場合、3つの行が返されるという事実にもかかわらずです。 返される行を制限します。
これはCOUNT()
で確認できます 条項。
SELECT COUNT(*) FROM Cats;
結果:
+--------------------+ | (No column name) | |--------------------| | 3 | +--------------------+
行数をリセット
ROWCOUNT
をリセットできます 0
の値を指定して値を指定します (ゼロ)。
これは、クエリの結果が制限されなくなることを意味します。クエリは最後まで処理を続行します。
SET ROWCOUNT 0;
SELECT * FROM Cats;
結果:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | +---------+-----------+ (3 rows affected)
ROWCOUNTとTOP()
TOP()
を使用する場合 ROWCOUNT
をすでに設定している場合のクエリの句 、ROWCOUNT
設定はTOP()
のみをオーバーライドします ROWCOUNT
の場合 小さい方の値です。
ROWCOUNT
の例を次に示します。 大きい方の値です。
SET ROWCOUNT 3;
SELECT TOP(2) * FROM Dogs;
結果:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | | 2 | Fluffy | +---------+-----------+ (2 rows affected)
この場合、TOP()
条項が勝ちました。
ROWCOUNT
の例を次に示します。 小さい方の値です。
SET ROWCOUNT 1;
SELECT TOP(2) * FROM Dogs;
結果:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | +---------+-----------+ (1 row affected)
互換性
Microsoftは、SET ROWCOUNT
を推奨していることに注意してください。 DELETE
には影響しません 、INSERT
、およびUPDATE
SQLServerの将来のリリースでのステートメント。 Microsoftは、新しい開発作業でこのような使用を避け、現在それを使用しているアプリケーションを変更することを計画することをお勧めします。
TOP()
の使用をお勧めします DELETE
で影響を受ける行を制限する必要がある場合は句 、INSERT
、およびUPDATE
ステートメント。
注意
ROWCOUNT
オプションは、トリガーを含むほとんどのT-SQLステートメントで機能します。ただし、動的カーソルには影響しませんが、キーセットおよび非依存カーソルの行セットは制限されます。したがって、このオプションは注意して使用する必要があります。