Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak działa SET ROWCOUNT w SQL Server

W SQL Server możesz użyć SET ROWCOUNT aby ograniczyć liczbę wierszy zwracanych przez zapytanie.

Sposób działania polega na tym, że SQL Server przestaje przetwarzać zapytanie po zwróceniu określonej liczby wierszy.

Jest podobny do TOP() klauzula, ale z tą różnicą, że SET ROWCOUNT jest ustawiona poza zapytaniem i będzie miała wpływ na wszystkie kolejne zapytania.

Przykład

Oto przykład do zademonstrowania.

Najpierw zróbmy zapytanie bez ustawienie ROWCOUNT .

SELECT * FROM Dogs;

Wynik:

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

Więc cztery wiersze są zwracane bez ustawienia ROWCOUNT .

Teraz użyjmy SET ROWCOUNT aby ograniczyć liczbę wierszy, a następnie uruchom zapytanie ponownie.

SET ROWCOUNT 2;
SELECT * FROM Dogs;

Wynik:

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

Kolejne zapytania

Jak wspomniano, SET ROWCOUNT wpływa na wszystkie kolejne zapytania.

Jeśli uruchomię następujące zapytanie bezpośrednio po poprzednim, zwrócone zostaną również dwa wiersze.

SELECT * FROM Cats;

Wynik:

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

Dzieje się tak pomimo faktu, że trzy wiersze zostałyby zwrócone, gdybym nie użył SET ROWCOUNT aby ograniczyć zwracane wiersze.

Mogę to zweryfikować za pomocą COUNT() klauzula.

SELECT COUNT(*) FROM Cats;

Wynik:

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

Zresetuj ROWCOUNT

Możesz zresetować ROWCOUNT wartość poprzez nadanie jej wartości 0 (zero).

Oznacza to, że zapytania nie będą już miały ograniczonych wyników. Zapytanie będzie przetwarzane do samego końca.

SET ROWCOUNT 0;
SELECT * FROM Cats;

Wynik:

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

ROWCOUNT kontra TOP()

Jeśli używasz TOP() klauzula w zapytaniu, gdy już ustawiłeś ROWCOUNT , Twoje ROWCOUNT ustawienie zastąpi tylko TOP() jeśli ROWCOUNT to mniejsza wartość.

Oto przykład, w którym ROWCOUNT to większa wartość.

SET ROWCOUNT 3;
SELECT TOP(2) * FROM Dogs;

Wynik:

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

W tym przypadku TOP() Klauzula wygrała.

A oto przykład, gdzie ROWCOUNT to mniejsza wartość.

SET ROWCOUNT 1;
SELECT TOP(2) * FROM Dogs;

Wynik:

+---------+-----------+
| DogId   | DogName   |
|---------+-----------|
| 1       | Fetch     |
+---------+-----------+
(1 row affected)

Kompatybilność

Pamiętaj, że firma Microsoft zaleca, aby SET ROWCOUNT nie wpłynie na DELETE , INSERT i UPDATE oświadczenia w przyszłej wersji programu SQL Server. Firma Microsoft zaleca unikanie takiego użycia w nowych pracach programistycznych i planuje modyfikowanie aplikacji, które obecnie z niego korzystają.

Microsoft zaleca używanie TOP() klauzula, jeśli chcesz ograniczyć liczbę wierszy, których dotyczy DELETE , INSERT i UPDATE oświadczenia.

Uwaga

ROWCOUNT opcja działa na większości instrukcji T-SQL, w tym na wyzwalaczach. Nie ma to jednak wpływu na kursory dynamiczne, ale ogranicza zestaw wierszy zestawu kluczy i niewrażliwych kursorów. Dlatego z tej opcji należy korzystać ostrożnie.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DATEDIFF() vs DATEDIFF_BIG() w SQL Server:jaka jest różnica?

  2. Jak mogę utworzyć użytkownika w bazie danych SQL Server Express dodanej do mojego projektu?

  3. Typy kursorów programu SQL Server — dynamiczny kursor tylko do przodu | Samouczek SQL Server / Samouczek TSQL

  4. Jak usunąć wiodące i końcowe białe znaki w SQL Server — TRIM()

  5. Czy istnieje różnica w wydajności między CTE , podzapytaniem, tabelą tymczasową lub zmienną tabelową?