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ステートメントで機能します。ただし、動的カーソルには影響しませんが、キーセットおよび非依存カーソルの行セットは制限されます。したがって、このオプションは注意して使用する必要があります。