Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

@@ROWCOUNT – Obtenha o número de linhas afetadas pela última instrução no SQL Server


No SQL Server, você pode usar o @@ROWCOUNT função do sistema para retornar o número de linhas afetadas pela última instrução T-SQL.

Por exemplo, se uma consulta retornar 4 linhas, @@ROWCOUNT retornará 4.

Exemplo 1 – Selecionando dados


Aqui está um exemplo básico para demonstrar como funciona.
SELECT * FROM Dogs;
SELECT @@ROWCOUNT;

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

Neste caso, meu SELECT declaração retornou 3 linhas e, portanto, @@ROWCOUNT devolvido 3.

Exemplo 2 – Atualizando dados


Aqui está um exemplo de uso de @@ROWCOUNT com um UPDATE para testar se alguma linha foi atualizada ou não.
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

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

Nesse caso, nenhuma linha foi atualizada porque o DogId não existia na tabela. Conseguimos usar @@ROWCOUNT com um IF para retornar uma mensagem apropriada ao usuário.

Aqui está novamente, mas desta vez o cachorro existe.
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

Resultado:
(1 row affected)
Your dog will be rewarded accordingly

Conjunto de dados extremamente grande?


Se você acha que a quantidade de linhas afetadas por uma instrução será superior a 2 bilhões, use ROWCOUNT_BIG() em vez de.

Você pode usá-lo da mesma forma que @@ROWCOUNT é usado.
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

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

Quando @@ROWCOUNT é redefinido


Declarações como USE , SET <option> , DEALLOCATE CURSOR , CLOSE CURSOR , PRINT , RAISERROR , BEGIN TRANSACTION , ou COMMIT TRANSACTION redefina o @@ROWCOUNT valor para 0 .

Executando SELECT @@ROWCOUNT por si só também retornará 0 .