En SQL Server, puede usar SET ROWCOUNT
para limitar las filas devueltas por una consulta.
La forma en que funciona es que hace que SQL Server deje de procesar la consulta después de que se devuelva el número especificado de filas.
Es similar al TOP()
cláusula, pero con la diferencia de que SET ROWCOUNT
se establece fuera de la consulta y afectará a todas las consultas posteriores.
Ejemplo
Aquí hay un ejemplo para demostrarlo.
Primero, hagamos una consulta sin configurando ROWCOUNT
.
SELECT * FROM Dogs;
Resultado:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | | 2 | Fluffy | | 3 | Wag | | 1002 | Fetch | +---------+-----------+ (4 rows affected)
Entonces se devuelven cuatro filas sin configurar ROWCOUNT
.
Ahora usemos SET ROWCOUNT
para limitar el número de filas, luego vuelva a ejecutar la consulta.
SET ROWCOUNT 2;
SELECT * FROM Dogs;
Resultado:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | | 2 | Fluffy | +---------+-----------+ (2 rows affected)
Consultas posteriores
Como se mencionó, SET ROWCOUNT
afecta a todas las consultas posteriores.
Si ejecuto la siguiente consulta inmediatamente después de la anterior, también se devuelven dos filas.
SELECT * FROM Cats;
Resultado:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 1 | Meow | | 2 | Fluffy | +---------+-----------+ (2 rows affected)
Esto es a pesar del hecho de que se habrían devuelto tres filas si no hubiera usado SET ROWCOUNT
para limitar las filas que se devuelven.
Puedo verificar esto con COUNT()
cláusula.
SELECT COUNT(*) FROM Cats;
Resultado:
+--------------------+ | (No column name) | |--------------------| | 3 | +--------------------+
Restablecer RECUENTO DE FILAS
Puede restablecer el ROWCOUNT
valor dándole un valor de 0
(cero).
Esto significa que las consultas ya no tendrán sus resultados limitados. La consulta seguirá procesándose hasta el final.
SET ROWCOUNT 0;
SELECT * FROM Cats;
Resultado:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | +---------+-----------+ (3 rows affected)
CONTADOR DE FILAS vs SUPERIOR()
Si usa el TOP()
cláusula en una consulta cuando ya ha configurado su ROWCOUNT
, su ROWCOUNT
la configuración solo anulará TOP()
si ROWCOUNT
es el valor más pequeño.
Aquí hay un ejemplo donde ROWCOUNT
es el valor mayor.
SET ROWCOUNT 3;
SELECT TOP(2) * FROM Dogs;
Resultado:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | | 2 | Fluffy | +---------+-----------+ (2 rows affected)
En este caso, el TOP()
ganó la cláusula.
Y aquí hay un ejemplo donde ROWCOUNT
es el valor más pequeño.
SET ROWCOUNT 1;
SELECT TOP(2) * FROM Dogs;
Resultado:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | +---------+-----------+ (1 row affected)
Compatibilidad
Tenga en cuenta que Microsoft aconseja que SET ROWCOUNT
no afectará DELETE
, INSERT
y UPDATE
instrucciones en una versión futura de SQL Server. Microsoft recomienda que evite dicho uso en nuevos trabajos de desarrollo y planee modificar las aplicaciones que actualmente lo usan.
Microsoft recomienda usar TOP()
cláusula si necesita limitar las filas afectadas en DELETE
, INSERT
y UPDATE
declaraciones.
Precaución
El ROWCOUNT
La opción funciona en la mayoría de las declaraciones de T-SQL, incluidos los disparadores. Sin embargo, no afecta a los cursores dinámicos, pero limita el conjunto de filas de cursores insensibles y de conjunto de claves. Por lo tanto, esta opción debe usarse con precaución.