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

@@ ROWCOUNT –SQLServerの最後のステートメントの影響を受ける行数を取得する

    SQL Serverでは、@@ROWCOUNTを使用できます。 最後のT-SQLステートメントの影響を受けた行数を返すシステム関数。

    たとえば、クエリが4行を返す場合、@@ROWCOUNT 4を返します。

    例1-データの選択

    これがどのように機能するかを示す基本的な例です。

    SELECT * FROM Dogs;
    SELECT @@ROWCOUNT;

    結果:

    +---------+-----------+-----------+
    | DogId   | DogName   | GoodDog   |
    |---------+-----------+-----------|
    | 1       | Fetch     | 0         |
    | 2       | Fluffy    | 0         |
    | 3       | Wag       | 0         |
    +---------+-----------+-----------+
    (3 rows affected)
    +--------------------+
    | (No column name)   |
    |--------------------|
    | 3                  |
    +--------------------+
    (1 row affected)

    この場合、私のSELECT ステートメントは3行を返したため、@@ROWCOUNT 3を返しました。

    例2–データの更新

    @@ROWCOUNTの使用例を次に示します。 UPDATEを使用 行が更新されたかどうかをテストするステートメント。

    UPDATE Dogs 
    SET GoodDog = 1
    WHERE DogId = 4
    IF @@ROWCOUNT > 0
        PRINT 'Your dog will be rewarded accordingly';
    ELSE
        PRINT 'A dog outside the system cannot be a good dog'
    GO

    結果:

    (0 rows affected)
    A dog outside the system cannot be a good dog

    この場合、DogIdがテーブルに存在しなかったため、行は更新されませんでした。 @@ROWCOUNTを使用できました IFを使用 適切なメッセージをユーザーに返すステートメント。

    ここに再びありますが、今回は犬が存在します。

    UPDATE Dogs 
    SET GoodDog = 1
    WHERE DogId = 1
    IF @@ROWCOUNT > 0
        PRINT 'Your dog will be rewarded accordingly';
    ELSE
        PRINT 'A dog outside the system cannot be a good dog'
    GO

    結果:

    (1 row affected)
    Your dog will be rewarded accordingly

    非常に大きなデータセット?

    ステートメントの影響を受ける行数が20億を超えると思われる場合は、ROWCOUNT_BIG()を使用してください。 代わりに。

    @@ROWCOUNTと同じように使用できます 使用されます。

    UPDATE Dogs 
    SET GoodDog = 1
    WHERE DogId = 4
    IF ROWCOUNT_BIG() > 0
        PRINT 'Your dog will be rewarded accordingly';
    ELSE
        PRINT 'A dog outside the system cannot be a good dog'
    GO

    結果:

    (0 rows affected)
    A dog outside the system cannot be a good dog

    @@ROWCOUNTの場合 リセットです

    USEなどのステートメント 、SET <option>DEALLOCATE CURSORCLOSE CURSORPRINTRAISERRORBEGIN TRANSACTION 、またはCOMMIT TRANSACTION @@ROWCOUNTをリセットします 0への値 。

    S ELECT @@ROWCOUNTを実行しています 単独でも0を返します 。


    1. SQLclを使用するときにクエリからINSERTステートメントを生成する方法(Oracle)

    2. Oracleシーケンスの現在の値をインクリメントせずに取得するにはどうすればよいですか?

    3. MySQL –リストからインデックス位置を抽出するELT()およびFILED()関数

    4. Postgresの配列列の各要素に関数を適用するにはどうすればよいですか?