Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как работи SET ROWCOUNT в SQL Server

В SQL Server можете да използвате SET ROWCOUNT за да ограничите редовете, върнати от заявка.

Начинът, по който работи е, че кара SQL Server да спре обработката на заявката след връщане на посочения брой редове.

Това е подобно на TOP() клауза, но с тази разлика, че SET ROWCOUNT се задава извън заявката и ще засегне всички следващи заявки.

Пример

Ето пример за демонстрация.

Първо, нека направим заявка без настройка ROWCOUNT .

SELECT * FROM Dogs;

Резултат:

+---------+-----------+
| DogId   | DogName   |
|---------+-----------|
| 1       | Fetch     |
| 2       | Fluffy    |
| 3       | Wag       |
| 1002    | Fetch     |
+---------+-----------+
(4 rows affected)

Така че се връщат четири реда без да се задава ROWCOUNT .

Сега нека използваме SET ROWCOUNT за да ограничите броя на редовете, след това изпълнете заявката отново.

SET ROWCOUNT 2;
SELECT * FROM Dogs;

Резултат:

+---------+-----------+
| DogId   | DogName   |
|---------+-----------|
| 1       | Fetch     |
| 2       | Fluffy    |
+---------+-----------+
(2 rows affected)

Последващи заявки

Както бе споменато, SET ROWCOUNT засяга всички следващи заявки.

Ако изпълня следната заявка непосредствено след предишната, също се връщат два реда.

SELECT * FROM Cats;

Резултат:

+---------+-----------+
| CatId   | CatName   |
|---------+-----------|
| 1       | Meow      |
| 2       | Fluffy    |
+---------+-----------+
(2 rows affected)

Това е въпреки факта, че щяха да бъдат върнати три реда, ако не използвах SET ROWCOUNT за да ограничите връщаните редове.

Мога да проверя това с COUNT() клауза.

SELECT COUNT(*) FROM Cats;

Резултат:

+--------------------+
| (No column name)   |
|--------------------|
| 3                  |
+--------------------+

Нулиране на ROWCOUNT

Можете да нулирате 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 изявления в бъдеща версия на SQL Server. Microsoft препоръчва да избягвате подобно използване в нови разработки и да планирате да модифицирате приложения, които в момента го използват.

Microsoft препоръчва използването на TOP() клауза, ако трябва да ограничите редовете, засегнати в DELETE , INSERT и UPDATE изявления.

Внимание

ROWCOUNT опцията работи с повечето T-SQL изрази, включително тригери. Това обаче не засяга динамичните курсори, но ограничава набора от редове от набор от ключове и нечувствителни курсори. Следователно тази опция трябва да се използва с повишено внимание.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какво НЕ е логически оператор в SQL Server - SQL Server / TSQL урок, част 121

  2. Да се ​​изтрие ли един запис от Entity Framework?

  3. Разлика между sys.views, sys.system_views и sys.all_views в SQL Server

  4. Как да конвертирате празни пространства в нулеви стойности, като използвате SQL Server?

  5. Тригер за актуализиране на SQL Server, Получавайте само променени полета