No SQL Server, você pode usar
SET ROWCOUNT
para limitar as linhas retornadas por uma consulta. A maneira como funciona é que faz com que o SQL Server pare de processar a consulta após o número especificado de linhas ser retornado.
É semelhante ao
TOP()
cláusula, mas com a diferença de que SET ROWCOUNT
é definido fora da consulta e afetará todas as consultas subsequentes. Exemplo
Aqui está um exemplo para demonstrar.
Primeiro, vamos fazer uma consulta sem configurando
ROWCOUNT
. SELECT * FROM Dogs;
Resultado:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | | 2 | Fluffy | | 3 | Wag | | 1002 | Fetch | +---------+-----------+ (4 rows affected)
Portanto, quatro linhas são retornadas sem definir
ROWCOUNT
. Agora vamos usar
SET ROWCOUNT
para limitar o número de linhas e execute a consulta novamente. SET ROWCOUNT 2;
SELECT * FROM Dogs;
Resultado:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | | 2 | Fluffy | +---------+-----------+ (2 rows affected)
Consultas subsequentes
Como mencionado,
SET ROWCOUNT
afeta todas as consultas subsequentes. Se eu executar a consulta a seguir imediatamente após a anterior, duas linhas também serão retornadas.
SELECT * FROM Cats;
Resultado:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 1 | Meow | | 2 | Fluffy | +---------+-----------+ (2 rows affected)
Isso ocorre apesar do fato de que três linhas teriam sido retornadas, se eu não tivesse usado
SET ROWCOUNT
para limitar as linhas que estão sendo retornadas. Posso verificar isso com o
COUNT()
cláusula. SELECT COUNT(*) FROM Cats;
Resultado:
+--------------------+ | (No column name) | |--------------------| | 3 | +--------------------+
Redefinir ROWCOUNT
Você pode redefinir o
ROWCOUNT
valor dando-lhe um valor de 0
(zero). Isso significa que as consultas não terão mais seus resultados limitados. A consulta continuará sendo processada até o final.
SET ROWCOUNT 0;
SELECT * FROM Cats;
Resultado:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | +---------+-----------+ (3 rows affected)
ROWCOUNT vs TOP()
Se você usar o
TOP()
cláusula em uma consulta quando você já definiu seu ROWCOUNT
, seu ROWCOUNT
configuração só substituirá TOP()
se ROWCOUNT
é o menor valor. Aqui está um exemplo em que
ROWCOUNT
é o maior valor. SET ROWCOUNT 3;
SELECT TOP(2) * FROM Dogs;
Resultado:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | | 2 | Fluffy | +---------+-----------+ (2 rows affected)
Neste caso, o
TOP()
cláusula venceu. E aqui está um exemplo em que
ROWCOUNT
é o menor valor. SET ROWCOUNT 1;
SELECT TOP(2) * FROM Dogs;
Resultado:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | +---------+-----------+ (1 row affected)
Compatibilidade
Observe que a Microsoft recomenda que
SET ROWCOUNT
não afetará DELETE
, INSERT
e UPDATE
instruções em uma versão futura do SQL Server. A Microsoft recomenda que você evite esse uso em novos trabalhos de desenvolvimento e planeje modificar os aplicativos que o utilizam atualmente. A Microsoft recomenda usar o
TOP()
cláusula se você precisar limitar as linhas afetadas em DELETE
, INSERT
e UPDATE
declarações. Cuidado
O
ROWCOUNT
A opção funciona na maioria das instruções T-SQL, incluindo gatilhos. No entanto, ele não afeta os cursores dinâmicos, mas limita o conjunto de linhas de conjunto de chaves e cursores insensíveis. Esta opção deve, portanto, ser usada com cautela.