sql >> データベース >  >> RDS >> Sqlserver

SQLServerでのSETROWCOUNTの動作

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


    1. SQLServerロックエスカレーション

    2. MicrosoftAccessデータをExcelに簡単にエクスポートする方法

    3. 別のテーブルの別の列を使用して1つの列を更新するにはどうすればよいですか? SQLエラー:ORA-00933:SQLコマンドが正しく終了していません

    4. データベースをgit(バージョン管理)下に置くにはどうすればよいですか?